#
# This file is a part of the NsCDE - Not so Common Desktop Environment
# Author: Hegel3DReloaded
# Licence: GPLv3
#

UseGettext {$NSCDE_ROOT/share/locale;NsCDE-WsPgMgr}
WindowLocaleTitle {Style Manager: Workspaces and Pages}
WindowSize 348 500
Colorset 22

Init
Begin
   Set $DeskNo = (GetScriptArgument 1)
   Set $PageMatrixX = (GetScriptArgument 2)
   Set $PageMatrixY = (GetScriptArgument 3)
   Set $MaxDeskNo = 8

   # Default DeskNo and PageNo
   If $DeskNo == {} Then
   Begin
      Do {None ("Workspaces and Pages Style Manager Warning")}
          { f_Notifier "Workspaces and Pages Syle Manager Warning" "Dismiss" "NsCDE/Warning.xpm"}
          { "Warning: Number of Workspaces and/or number of Pages are not set. Using 4 as default."}

      Set $DeskNo = 4
      Set $PageMatrixX = 2
      Set $PageMatrixY = 2
   End

   # By default, we are not in workspace rename mode.
   Set $Txt = 0

   # Multiply Pages X and Y to get number of pages
   Set $PageNo = (Mult $PageMatrixX $PageMatrixY)

   # Total number of pages
   Set $PagesTotal = (Mult $PageNo $DeskNo)

   # Configuration file
   Set $ConfFile = {$FVWM_USERDIR/WSM.conf}

   # NsCDE.conf configuration source selection
   Set $NsCDEUserConfig = (GetOutput {sh -c '[ -s $FVWM_USERDIR/NsCDE.conf ] && echo 1 || echo 0'} 1 1)
   If $NsCDEUserConfig == 1 Then
   Begin
      Set $NsCDEConfFile = {$FVWM_USERDIR/NsCDE.conf}
      Set $CreateNsCDEUserConfig = 0
   End
   Else
   Begin
      Set $NsCDEConfFile = {$NSCDE_DATADIR/fvwm/NsCDE.conf}
      Set $CreateNsCDEUserConfig = 1
   End

   # Font size/type setup
   If $DeskNo < 8 Then
   Begin
      If $DeskNo > 4 Then
      Begin
         # Font for 6 buttons variant
         Set $MainFontRegularOut = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium} 1 -1)
      End
      Else
      Begin
         # Font for 2 and/or 4 buttons variant
         Set $MainFontRegularOut = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s large} 1 -1)
      End
   End
   Else
   Begin
      # Font for 8 or more buttons variant
      Set $MainFontRegularOut = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s small} 1 -1)
   End
   Set $MainFontRegular = {Shadow=1 0 SE:} $MainFontRegularOut

   # Button names for desks
   Set $btnname = 0
   While $btnname < $MaxDeskNo Do
   Begin
      Set $btnname = (Add $btnname 1) 
      Set $NameDeskOut = {egrep '^WSP:} $btnname {:.*' "} $ConfFile {" 2>/dev/null | cut -d":" -f3 | tail -1}
      Set $NameDesk = (GetOutput $NameDeskOut 1 -1)

      If $NameDesk == {} Then
      Begin
         If $btnname == 1 Then
            Set $NameDesk = (Gettext {One})
         If $btnname == 2 Then
            Set $NameDesk = (Gettext {Two})
         If $btnname == 3 Then
            Set $NameDesk = (Gettext {Three})
         If $btnname == 4 Then
            Set $NameDesk = (Gettext {Four})
         If $btnname == 5 Then
            Set $NameDesk = (Gettext {Five})
         If $btnname == 6 Then
            Set $NameDesk = (Gettext {Six})
         If $btnname == 7 Then
            Set $NameDesk = (Gettext {Seven})
         If $btnname == 8 Then
            Set $NameDesk = (Gettext {Eight})
      End

      Set $NameDeskStr = { } $NameDesk

      ChangeFont $btnname $MainFontRegular
      ChangeTitle $btnname $NameDeskStr
   End

   # Desk info
   Set $SetTitleDsk = (Gettext {Number of Workspaces:}) {  } $DeskNo
   ChangeLocaleTitle 16 $SetTitleDsk

   # Pages info
   Set $SetTitlePgDsk = (Gettext {Pages per Workspace:}) {  } $PageNo
   ChangeTitle 17 $SetTitlePgDsk

   # Total desks * pages info
   Set $SetTitlePgTotal = (Gettext {Total Pages:}) {  } $PagesTotal
   ChangeTitle 18 $SetTitlePgTotal

   # For statistics in widgets 15, 16, 17, fill the value used later
   Set $TmpDesks = $DeskNo
   ChangeValue 11 $DeskNo
   SendSignal 11 1

   # Initialize working variables with default from this app init.
   Set $VTmpPageNo = $PageMatrixY
   Set $HTmpPageNo = $PageMatrixX
   ChangeValue 13 $VTmpPageNo
   ChangeValue 15 $HTmpPageNo

   # Fill in WsmEco Compact/Non-Compact WSM switch
   Do {SendToModule WsPgMgr SendString 26 2 $[infostore.wsm.eco]}
   ChangeLocaleTitle 26 (GetTitle 26)

   # FVWM3 DesktopConfiguration
   Do {SendToModule WsPgMgr SendString 28 1 $[FVWM_IS_FVWM3]_$[infostore.desktopconfiguration]}
   ChangeLocaleTitle 28 (GetTitle 28)

   # Keys
   Key Return A 24 1 {ReturnFromRename}
   Key Escape A 24 2 {ReturnFromRename}

   Set $DefFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium -Z 12} 1 -1)
   ChangeFont 9 $DefFont

   ChangeFont 26 $DefFont

   ChangeFont 16 $DefFont
   ChangeFont 17 $DefFont
   ChangeFont 18 $DefFont

   Set $BtnFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium -Z 15} 1 -1)
   ChangeFont 21 $BtnFont
   ChangeFont 22 $BtnFont
   ChangeFont 23 $BtnFont

   Set $HscFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium -Z 12} 1 -1)
   ChangeFont 11 $HscFont
   ChangeFont 13 $HscFont
   ChangeFont 15 $HscFont

   Set $SmallFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s small -Z 10.5} 1 -1)
   ChangeFont 12 $SmallFont
   ChangeFont 14 $SmallFont

   # FVWM3 DesktopConfiguration labels
   ChangeFont 27 $SmallFont
   ChangeFont 29 $SmallFont

   # Key bindings
   Key Return C 21 6 {KeyOk}
   Key Q C 22 1 {KeyClose}
   Key F1 A 23 1 {KeyHelp}
   Key Help A 23 1 {KeyHelp}

   # Nasty workaround because ForeColor of the TextField
   # widget is not applied and global value is used anyway.
   # How it works: if wanted Colorset is applied with
   # ChangeColorset to (any?) other widget after initialization
   # of the script, colorset foreground color will be properly
   # applied to TextField widget too. Even if fake widget is
   # hidden, this workaround still works as it should. 
   # We define hidden PushButton widhet on the end of the script
   # and send string "workaround" to routine 1 of the TextField
   # widget ("1 : " can be attached to any widget in fact ...).
   # This routine than changes the colorset of the hidden
   # PushButton widget, and this then triggers change in buggy
   # TextField to be applied.
   # This bug can be seen when default colorset for the script has
   # different foreground color than colorset applied to the
   # TextField widget. Another possible workaround is to define
   # globally back/fore/sh/hi colors for the script instead of
   # (or after definition) of a colorset, but this is unflexible,
   # since script background cannot be changed dinamically or
   # from outside of the script as colorset functionality allows.
   # Called wherever "ShowWidget 24" is called, as "SendSignal 25 1"
End

Widget 9
   Property
   Position 10 8
   Flags NoReliefString NoFocus Left
   Type ItemDraw
   LocaleTitle {Manage Number of Workspaces and Pages}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 10
   Property
   Position 38 45
   Flags NoReliefString NoFocus
   Type ItemDraw
   Icon NsCDE/FpMask.xpm
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 26
   Property
   Position 16 134
   Size 330 20
   Flags NoReliefString
   Type CheckBox
   Font "xft:::pixelsize=12"
   Value 1
   Title { Use Compact Workspace Manager                   }
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 26 1
      End
      1 :
      Begin
         If (GetValue 26) == 0 Then
         Begin
            Set $WsmEco = 0
         End
         Else
         Begin
            Set $WsmEco = 1
         End
      End
      2 :
      Begin
         If (LastString) == 1 Then
         Begin
            Set $InitialWsmEco = 1
            Set $WsmEco = 1
            ChangeValue 26 1
         End
         Else
         Begin
            Set $InitialWsmEco = 0
            Set $WsmEco = 0
            ChangeValue 26 0
         End
      End
End

Widget 1
Property
    Flags NoReliefString
    Position 50 53
    Size 124 26
    Type PushButton
    Title { One }
    Flags Left
    Colorset 40
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 1 1
       End
       1 :
       Begin
          ChangePosition 24 50 53
          Set $MyTitle = (GetTitle 1)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 1
       End
End

Widget 2
Property
    Flags NoReliefString
    Position 178 53
    Size 124 26
    Type PushButton
    Title { Two }
    Flags Left
    Colorset 42
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 2 1
       End
       1 :
       Begin
          If $TmpDesks == 2 Then
             ChangePosition 24 50 85
          If $TmpDesks == 4 Then
             ChangePosition 24 178 53
          If $TmpDesks == 6 Then
             ChangePosition 24 136 53
          If $TmpDesks == 8 Then
             ChangePosition 24 116 53
          Set $MyTitle = (GetTitle 2)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 2
       End
End

Widget 3
Property
    Flags NoReliefString
    Position 50 85
    Size 124 26
    Type PushButton
    Title { Three }
    Flags Left
    Colorset 44
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 3 1
       End
       1 :
       Begin
          If $TmpDesks == 4 Then
             ChangePosition 24 50 85
          If $TmpDesks == 6 Then
             ChangePosition 24 222 53
          If $TmpDesks == 8 Then
             ChangePosition 24 181 53
          Set $MyTitle = (GetTitle 3)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 3
       End
End

Widget 4
Property
    Flags NoReliefString
    Position 178 85
    Size 124 26
    Type PushButton
    Title { Four }
    Flags Left
    Colorset 46
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 4 1
       End
       1 :
       Begin
          If $TmpDesks == 4 Then
             ChangePosition 24 178 85
          If $TmpDesks == 6 Then
             ChangePosition 24 50 85
          If $TmpDesks == 8 Then
             ChangePosition 24 245 53
          Set $MyTitle = (GetTitle 4)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 4
       End
End

Widget 5
Property
    Flags NoReliefString Hidden
    Position 1 85
    Size 60 26
    Type PushButton
    Title { Five }
    Flags Left
    Colorset 40
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 5 1
       End
       1 :
       Begin
          If $TmpDesks == 6 Then
             ChangePosition 24 136 85
          If $TmpDesks == 8 Then
             ChangePosition 24 50 85
          Set $MyTitle = (GetTitle 5)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 5
       End
End

Widget 6
Property
    Flags NoReliefString Hidden
    Position 65 85
    Size 60 26
    Type PushButton
    Title { Six }
    Flags Left
    Colorset 42
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 6 1
       End
       1 :
       Begin
          If $TmpDesks == 6 Then
             ChangePosition 24 222 85
          If $TmpDesks == 8 Then
             ChangePosition 24 116 85
          Set $MyTitle = (GetTitle 6)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 6
       End
End

Widget 7
Property
    Flags NoReliefString Hidden
    Position 130 85
    Size 60 26
    Type PushButton
    Title {Seven}
    Flags Left
    Colorset 44
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 7 1
       End
       1 :
       Begin
          ChangePosition 24 181 85
          Set $MyTitle = (GetTitle 7)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 7
       End
End

Widget 8
Property
    Flags NoReliefString Hidden
    Position 194 85
    Size 60 26
    Type PushButton
    Title {Eight}
    Flags Left
    Colorset 46
    Main
       Case message of
       SingleClic :
       Begin
          SendSignal 8 1
       End
       1 :
       Begin
          ChangePosition 24 245 85
          Set $MyTitle = (GetTitle 8)
          ChangeTitle 24 $MyTitle
          ChangeMinValue 24 99
          ShowWidget 24
          SendSignal 25 1
          Set $Txt = 1
          Set $CalledBy = 8
       End
End

Widget 11
   Property
   Position 16 160
   Size 316 10
   Flags NoReliefString
   Type HScrollBar
   Font "xft:::pixelsize=15"
   MinValue 0
   Value 4
   MaxValue 8
   Main
      Case message of
      SingleClic :
      Begin
         If (GetValue 11) == 1 Then
         Begin
            Set $ButtonDisplayFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s large} 1 -1)
            ChangeFont 1 $ButtonDisplayFont
            ChangeFont 2 $ButtonDisplayFont
            ChangeValue 11 2
         End
         If (GetValue 11) == 3 Then
         Begin
            Set $ButtonDisplayFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s large} 1 -1)
            ChangeFont 1 $ButtonDisplayFont
            ChangeFont 2 $ButtonDisplayFont
            ChangeFont 3 $ButtonDisplayFont
            ChangeFont 4 $ButtonDisplayFont
            ChangeValue 11 4
         End
         If (GetValue 11) == 5 Then
         Begin
            Set $ButtonDisplayFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium} 1 -1)
            ChangeFont 1 $ButtonDisplayFont
            ChangeFont 2 $ButtonDisplayFont
            ChangeFont 3 $ButtonDisplayFont
            ChangeFont 4 $ButtonDisplayFont
            ChangeFont 5 $ButtonDisplayFont
            ChangeFont 6 $ButtonDisplayFont
            ChangeValue 11 6
         End
         If (GetValue 11) == 7 Then
         Begin
            Set $ButtonDisplayFont = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s small} 1 -1)
            ChangeFont 1 $ButtonDisplayFont
            ChangeFont 2 $ButtonDisplayFont
            ChangeFont 3 $ButtonDisplayFont
            ChangeFont 4 $ButtonDisplayFont
            ChangeFont 5 $ButtonDisplayFont
            ChangeFont 6 $ButtonDisplayFont
            ChangeFont 7 $ButtonDisplayFont
            ChangeFont 8 $ButtonDisplayFont
            ChangeValue 11 8
         End

         Set $TmpDesks = (GetValue 11)
         Set $SetTitleDsk = {Nr. of Desks:  } $TmpDesks
         ChangeTitle 16 $SetTitleDsk

         Set $HTmpPageNo = (GetValue 15)
         Set $VTmpPageNo = (GetValue 13)
         Set $TmpPageNo = (Mult $VTmpPageNo $HTmpPageNo)
         Set $TmpPagesTotal = (Mult $TmpPageNo $TmpDesks)

         Set $SetTitlePgTotal = {Total Pages:  } $TmpPagesTotal
         ChangeTitle 18 $SetTitlePgTotal

         SendSignal 11 1
      End
      1 :
      Begin
         If $TmpDesks == 0 Then
         Begin
            HideWidget 1
            HideWidget 2
            HideWidget 3
            HideWidget 4
            HideWidget 5
            HideWidget 6
            HideWidget 7
            HideWidget 8
         End

         If $TmpDesks == 2 Then
         Begin
            ShowWidget 1
            ShowWidget 2
            HideWidget 3
            HideWidget 4
            HideWidget 5
            HideWidget 6
            HideWidget 7
            HideWidget 8
            ChangeSize 1 253 26
            ChangeSize 2 253 26
            ChangeSize 24 253 25
            ChangePosition 1 50 53
            ChangePosition 2 50 85
         End

         If $TmpDesks == 4 Then
         Begin
            ShowWidget 1
            ShowWidget 2
            ShowWidget 3
            ShowWidget 4
            HideWidget 5
            HideWidget 6
            HideWidget 7
            HideWidget 8
            ChangeSize 1 124 26
            ChangeSize 2 124 26
            ChangeSize 3 124 26
            ChangeSize 4 124 26
            ChangeSize 24 124 26
            ChangePosition 1 50 53
            ChangePosition 2 178 53
            ChangePosition 3 50 85
            ChangePosition 4 178 85
         End

         If $TmpDesks == 6 Then
         Begin
            ShowWidget 1
            ShowWidget 2
            ShowWidget 3
            ShowWidget 4
            ShowWidget 5
            ShowWidget 6
            HideWidget 7
            HideWidget 8
            ChangeSize 1 82 26
            ChangeSize 2 82 26
            ChangeSize 3 82 26
            ChangeSize 4 82 26
            ChangeSize 5 82 26
            ChangeSize 6 82 26
            ChangeSize 24 82 26
            ChangePosition 2 136 53
            ChangePosition 3 222 53
            ChangePosition 4 50 85
            ChangePosition 5 136 85
            ChangePosition 6 222 85
         End

         If $TmpDesks == 8 Then
         Begin
            ShowWidget 1
            ShowWidget 2
            ShowWidget 3
            ShowWidget 4
            ShowWidget 5
            ShowWidget 6
            ShowWidget 7
            ShowWidget 8
            ChangeSize 1 60 26
            ChangeSize 2 60 26
            ChangeSize 3 60 26
            ChangeSize 4 60 26
            ChangeSize 5 60 26
            ChangeSize 6 60 26
            ChangeSize 7 60 26
            ChangeSize 8 60 26
            ChangeSize 24 60 26
            ChangePosition 2 116 53
            ChangePosition 3 181 53
            ChangePosition 4 245 53
            ChangePosition 5 50 85
            ChangePosition 6 116 85
            ChangePosition 7 181 85
            ChangePosition 8 245 85
         End
      End
End

Widget 12
   Property
   Position 10 226
   Flags NoReliefString NoFocus
   Type ItemDraw
   LocaleTitle {Nr. of Vertical Pages}
   Font "xft:::pixelsize=14"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 13
   Property
   Position 15 246
   Size 146 20
   Flags NoReliefString
   Type HScrollBar
   Font "xft:::pixelsize=15"
   MinValue 1
   MaxValue 4
   Value 2
   Main
      Case message of
      SingleClic :
      Begin
         Set $VTmpPageNo = (GetValue 13)
         Set $HTmpPageNo = (GetValue 15)
         Set $TmpPageNo = (Mult $VTmpPageNo $HTmpPageNo)
         Set $TmpPagesTotal = (Mult $TmpPageNo $TmpDesks)

         Set $SetTitlePgDsk = {Pages per Desk:  } $TmpPageNo
         ChangeTitle 17 $SetTitlePgDsk

         Set $SetTitlePgTotal = {Total Pages:  } $TmpPagesTotal
         ChangeTitle 18 $SetTitlePgTotal
      End
End

Widget 14
   Property
   Position 182 226
   Flags NoReliefString NoFocus
   Type ItemDraw
   LocaleTitle {Nr. of Horizontal Pages}
   Font "xft:::pixelsize=14"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 15
   Property
   Position 188 246
   Size 146 20
   Flags NoReliefString
   Type HScrollBar
   Font "xft:::pixelsize=15"
   MinValue 1
   MaxValue 4
   Value 2
   Main
      Case message of
      SingleClic :
      Begin
         Set $VTmpPageNo = (GetValue 13)
         Set $HTmpPageNo = (GetValue 15)
         Set $TmpPageNo = (Mult $VTmpPageNo $HTmpPageNo)
         Set $TmpPagesTotal = (Mult $TmpPageNo $TmpDesks)

         Set $SetTitlePgDsk = {Pages per Desk:  } $TmpPageNo
         ChangeTitle 17 $SetTitlePgDsk

         Set $SetTitlePgTotal = {Total Pages:  } $TmpPagesTotal
         ChangeTitle 18 $SetTitlePgTotal
      End
End

Widget 16
   Property
   Position 12 318
   Size 320 20
   Flags NoReliefString NoFocus Left
   Type ItemDraw
   Title {Nr. of Desks: }
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 17
   Property
   Position 12 338
   Size 320 20
   Flags NoReliefString NoFocus Left
   Type ItemDraw
   Title {Pages per Desk: }
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 18
   Property
   Position 12 358
   Size 320 20
   Flags NoReliefString NoFocus Left
   Type ItemDraw
   Title {Total Pages: }
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 19
   Property
   Position 284 324
   Flags NoReliefString NoFocus
   Type ItemDraw
   Icon NsCDE/DtWsSwitch.l.xpm
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 27
   Property
   Position 12 404
   Size 174 0
   Flags NoReliefString NoFocus Left
   Type ItemDraw
   LocaleTitle {Monitor Workspaces: }
   Font "xft:::pixelsize=14"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 28
   Property
   Position 210 400
   Flags NoReliefString Left
   Type PopupMenu
   Value 0
   Title { Global | Per Monitor| Shared }
   Main
      Case message of
      SingleClic :
      Begin
      End
      1 :
      Begin
         If (StrCopy (LastString) 1 2) == {1_} Then
         Begin
            Set $Fvwm3 = 1
            Set $InitialFvwm3DskConf = (StrCopy (LastString) 3 32)

            If $InitialFvwm3DskConf == {global} Then
            Begin
               ChangeValue 28 1
            End
            If $InitialFvwm3DskConf == {per-monitor} Then
            Begin
               ChangeValue 28 2
            End
            If $InitialFvwm3DskConf == {shared} Then
            Begin
               ChangeValue 28 3
            End

            Set $InitialFvwm3DskConfVal = (GetValue 28)
         End
         Else
         Begin
            HideWidget 28
            ShowWidget 29
            Set $Fvwm3 = 0
         End
      End
End

Widget 29
   Property
   Position 192 404
   Size 144 0
   Flags NoReliefString NoFocus Left Hidden
   Type ItemDraw
   LocaleTitle {Global Only (FVWM2)}
   Font "xft:::pixelsize=14"
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 20
   Property
   Position 3 448
   Size 344 0
   Flags NoReliefString NoFocus
   Type Rectangle
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 21
   Property
   Position 16 460
   Size 96 20
   Flags NoReliefString
   Type PushButton
   LocaleTitle {OK}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 21 6
      End
      1 :
      Begin
         Set $DStringToCheckCmd = {egrep -q '^([[:space:]]+)?InfoStoreAdd[[:space:]]+desknum' '} $ExpandFile {' ; echo $?}
         Set $DStringToCheck = (GetOutput $DStringToCheckCmd 1 -1)
         If $DStringToCheck == 0 Then
         Begin
            Do {InfoStoreAdd desknum } $TmpDesks
            Set $WriteDeskCmd = {$NSCDE_TOOLSDIR/ised -c 's/\(^\([[:space:]]\)\?InfoStoreAdd[[:space:]]\+desknum[[:space:]]\+\)\([[:digit:]]\+\([[:space:]]\+\)\?\)/\1} $TmpDesks {/g' -f "} $ExpandFile {"}
            Set $WriteDesk = (GetOutput $WriteDeskCmd 1 -1)
         End
 
         If $DStringToCheck == 2 Then
         Begin
            Do {f_Notifier "Config Set Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error] } $DStringToCheck { $[gt.occured while checking config file] } $ExpandFile {."}
            Quit
         End
 
         If $DStringToCheck == 1 Then
         Begin
            Do {InfoStoreAdd desknum } $TmpDesks
            Set $WriteDeskCmd = {echo 'InfoStoreAdd desknum } $TmpDesks {' >> '} $ExpandFile {'}
            Set $WriteDesk = (GetOutput $WriteDeskCmd 1 -1)
         End
      End
      2 :
      Begin
         Set $PVStringToCheckCmd = {egrep -q '^([[:space:]]+)?InfoStoreAdd[[:space:]]+pagematrixY' '} $ExpandFile {' ; echo $?}
         Set $PVStringToCheck = (GetOutput $PVStringToCheckCmd 1 -1)
         If $PVStringToCheck == 0 Then
         Begin
            Do {InfoStoreAdd pagematrixY } $VTmpPageNo
            Set $WritePVCmd = {$NSCDE_TOOLSDIR/ised -c 's/\(^\([[:space:]]\)\?InfoStoreAdd[[:space:]]\+pagematrixY[[:space:]]\+\)\([[:digit:]]\+\([[:space:]]\+\)\?\)/\1} $VTmpPageNo {/g' -f "} $ExpandFile {"}
            Set $WritePV = (GetOutput $WritePVCmd 1 -1)
         End
 
         If $PVStringToCheck == 2 Then
         Begin
            Do {f_Notifier "Config Set Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error] } $PVStringToCheck { $[gt.occured while checking config file] } $ExpandFile {."}
            Quit
         End
 
         If $PVStringToCheck == 1 Then
         Begin
            Do {InfoStoreAdd pagematrixY } $VTmpPageNo
            Set $WritePVCmd = {echo 'InfoStoreAdd pagematrixY } $VTmpPageNo {' >> '} $ExpandFile {'}
            Set $WritePV = (GetOutput $WritePVCmd 1 -1)
         End
      End
      3 :
      Begin
         Set $PHStringToCheckCmd = {egrep -q '^([[:space:]]+)?InfoStoreAdd[[:space:]]+pagematrixX' '} $ExpandFile {' ; echo $?}
         Set $PHStringToCheck = (GetOutput $PHStringToCheckCmd 1 -1)
         If $PHStringToCheck == 0 Then
         Begin
            Do {InfoStoreAdd pagematrixX } $HTmpPageNo
            Set $WritePHCmd = {$NSCDE_TOOLSDIR/ised -c 's/\(^\([[:space:]]\)\?InfoStoreAdd[[:space:]]\+pagematrixX[[:space:]]\+\)\([[:digit:]]\+\([[:space:]]\+\)\?\)/\1} $HTmpPageNo {/g' -f "} $ExpandFile {"}
            Set $WritePH = (GetOutput $WritePHCmd 1 -1)
         End
         If $PHStringToCheck == 2 Then
         Begin
            Do {f_Notifier "Config Set Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error] } $PHStringToCheck { $[gt.occured while checking config file] } $ExpandFile {."}
            Quit
         End
 
         If $PHStringToCheck == 1 Then
         Begin
            Do {InfoStoreAdd pagematrixX } $HTmpPageNo
            Set $WritePHCmd = {echo 'InfoStoreAdd pagematrixX } $HTmpPageNo {' >> '} $ExpandFile {'}
            Set $WritePH = (GetOutput $WritePHCmd 1 -1)
         End
      End
      4 :
      Begin
         Set $WSMECOStringToCheckCmd = {egrep -q '^(#)?([[:space:]]+)?InfoStoreAdd[[:space:]]+wsm\.eco' '} $ExpandFile {' ; echo $?}
         Set $WSMECOStringToCheck = (GetOutput $WSMECOStringToCheckCmd 1 -1)
         If $WSMECOStringToCheck == 0 Then
         Begin
            Do {InfoStoreAdd wsm.eco } $WsmEco
            Set $WriteWSMECOCmd = {$NSCDE_TOOLSDIR/ised -c 's/^\(#\([[:space:]]\+\)\?\)\?\(\([[:space:]]\+\)\?InfoStoreAdd[[:space:]]\+wsm\.eco[[:space:]]\+\)\([[:digit:]]\+\([[:space:]]\+\)\?\)/\3} $WsmEco {/g' -f "} $ExpandFile {"}
            Set $WriteWSMECO = (GetOutput $WriteWSMECOCmd 1 -1)
         End
         If $WSMECOStringToCheck == 2 Then
         Begin
            Do {f_Notifier "Config Set Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error] } $WSMECOStringToCheck { $[gt.occured while checking config file] } $ExpandFile {."}
            Quit
         End
         If $WSMECOStringToCheck == 1 Then
         Begin
            Do {InfoStoreAdd wsm.eco } $WsmEco
            Set $WriteWSMECOCmd = {echo 'InfoStoreAdd wsm.eco } $WsmEco {' >> '} $ExpandFile {'}
            Set $WriteWSMECO = (GetOutput $WriteWSMECOCmd 1 -1)
         End
      End
      5 :
      Begin
         If $Fvwm3DskConfVal == 1 Then
         Begin
            Set $Fvwm3DskConf = {global}
         End
         If $Fvwm3DskConfVal == 2 Then
         Begin
            Set $Fvwm3DskConf = {per-monitor}
         End
         If $Fvwm3DskConfVal == 3 Then
         Begin
            Set $Fvwm3DskConf = {shared}
         End
 
         Set $DskConfStringToCheckCmd = {egrep -q '^(#)?([[:space:]]+)?InfoStoreAdd[[:space:]]+desktopconfiguration' '} $ExpandFile {' ; echo $?}
         Set $DskConfStringToCheck = (GetOutput $DskConfStringToCheckCmd 1 -1)
         If $DskConfStringToCheck == 0 Then
         Begin
            Do {InfoStoreAdd desktopconfiguration } $Fvwm3DskConf
            Do {Schedule 100 DesktopConfiguration $[infostore.desktopconfiguration]}
            Set $WriteDskConfCmd = {$NSCDE_TOOLSDIR/ised -c 's/^\(#\([[:space:]]\+\)\?\)\?\(\([[:space:]]\+\)\?InfoStoreAdd[[:space:]]\+desktopconfiguration[[:space:]]\+\)\(\(global\|per-monitor\|shared\)\+\([[:space:]]\+\)\?\)/\3} $Fvwm3DskConf {/g' -f "} $ExpandFile {"}
            Set $WriteDskConf = (GetOutput $WriteDskConfCmd 1 -1)
         End
         If $DskConfStringToCheck == 2 Then
         Begin
            Do {f_Notifier "Config Set Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error] } $DskConfStringToCheck { $[gt.occured while checking config file] } $ExpandFile {."}
            Quit
         End
         If $DskConfStringToCheck == 1 Then
         Begin
            Do {InfoStoreAdd desktopconfiguration } $Fvwm3DskConf
            Do {Schedule 100 DesktopConfiguration $[infostore.desktopconfiguration]}
            Set $WriteDskConfCmd = {echo 'InfoStoreAdd desktopconfiguration } $Fvwm3DskConf {' >> '} $ExpandFile {'}
            Set $WriteDskConf = (GetOutput $WriteDskConfCmd 1 -1)
         End
      End
      6 :
      Begin
         Set $Action = 0
         Set $PerformRestart = 0

         # Prepare file path from external variable to WriteToFile expanded, non-variable name
         Set $ExpandFile = (GetOutput {sh -c "echo $FVWM_USERDIR/NsCDE.conf"} -1 1)

         # Perform action only if new value in $TmpDeks is not equal to app start value in $DeskNo
         If $TmpDesks <> $DeskNo Then
         Begin
            Set $Action = 1
            Set $DSAction = 1
         End

         If $VTmpPageNo <> $PageMatrixY Then
         Begin
            Set $Action = 1
            Set $PVAction = 1
         End

         If $HTmpPageNo <> $PageMatrixX Then
         Begin
            Set $Action = 1
            Set $PHAction = 1
         End

         If $InitialWsmEco <> $WsmEco Then
         Begin
            Set $Action = 1
         End

         If $Fvwm3 == 1 Then
         Begin
            Set $Fvwm3DskConfVal = (GetValue 28)
            If $InitialFvwm3DskConfVal <> $Fvwm3DskConfVal Then
            Begin
               Set $Action = 1
            End
         End

         If $Action == 1 Then
         Begin
            If $CreateNsCDEUserConfig == 1 Then
            Begin
               Set $CopyConfigcmd = {[ ! -s "} $ExpandFile {" ] && cp -f $FVWM_DATADIR/NsCDE.conf '} $ExpandFile {' 2>&1}
               Set $CopyConfig = (GetOutput $CopyConfigcmd 1 -1)
               If $CopyConfig <> {} Then
               Begin
                  Do {f_Notifier "Copy Error" "Dismiss" "NsCDE/Error.xpm" "$[gt.Error creating] $[FVWM_USERDIR]/NsCDE.conf: \\\"} $CopyConfig {\\\""}
                  Quit
               End
               Else
               Begin
                  If $DSAction == 1 Then
                  Begin
                     SendSignal 21 1
                     Set $PerformRestart = 1
                  End

                  If $PVAction == 1 Then
                  Begin
                     SendSignal 21 2
                     Set $PerformRestart = 1
                  End

                  If $PHAction == 1 Then
                  Begin
                     SendSignal 21 3
                     Set $PerformRestart = 1
                  End

                  If $InitialWsmEco <> $WsmEco Then
                  Begin
                     SendSignal 21 4
                     Set $PerformRestart = 1
                  End

                  If $Fvwm3 == 1 Then
                  Begin
                     Set $Fvwm3DskConfVal = (GetValue 28)
                     If $InitialFvwm3DskConfVal <> $Fvwm3DskConfVal Then
                     Begin
                        SendSignal 21 5
                        Set $PerformRestart = 1
                     End
                  End
               End
            End
            Else
            Begin
               If $DSAction == 1 Then
               Begin
                  SendSignal 21 1
                  Set $PerformRestart = 1
               End

               If $PVAction == 1 Then
               Begin
                  SendSignal 21 2
                  Set $PerformRestart = 1
               End

               If $PHAction == 1 Then
               Begin
                  SendSignal 21 3
                  Set $PerformRestart = 1
               End

               If $InitialWsmEco <> $WsmEco Then
               Begin
                  SendSignal 21 4
                  Set $PerformRestart = 1
               End

               If $Fvwm3 == 1 Then
               Begin
                  If $InitialFvwm3DskConf <> $Fvwm3DskConf Then
                  Begin
                     SendSignal 21 5
                     Set $PerformRestart = 1
                  End
               End
            End
         End
         If $PerformRestart == 1 Then
         Begin
            Do {InfoStoreRemove fvwmdesknum}
            Do {InfoStoreRemove WSM}
            Do {Schedule 320 Restart}
         End
         Else
         Begin
            If (GetTitle 22) == {Close} Then
            Begin
               Do {KillModule FvwmScript WSM}
            End
         End
         Quit
     End
End

Widget 22
   Property
   Position 127 460
   Size 96 20
   Flags NoReliefString
   Type PushButton
   LocaleTitle {Cancel}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 22 1
      End
      1 :
      Begin
         If (GetTitle 22) == {Close} Then
         Begin
            Do {KillModule FvwmScript WSM}
         End
         Quit
      End
End

Widget 23
   Property
   Position 238 460
   Size 96 20
   Flags NoReliefString
   Type PushButton
   LocaleTitle {Help}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 23 1
      End
      1 :
      Begin
         Do {f_DisplayURL "$[gt.Workspaces and Pages Style Manager]" html/NsCDE-WsPgMgr.html}
      End
End

Widget 24
   Property
   Flags NoReliefString Hidden
   Position 2 2
   Size 124 26
   Type TextField
   Title {}
   Flags Left
   Colorset 20
   Main
      Case message of
      SingleClic :
      Begin
      End
      1 :
      Begin
         # Handle cosmetic space at the beggining of the PushButton
         Set $CheckTitle = (StrCopy (GetTitle 24) 1 1)
         If $CheckTitle == { } Then
         Begin
            Set $NewButtonLabel = (StrCopy (GetTitle 24) 2 18)
         End
         Else
         Begin
            Set $NewButtonLabel = (GetTitle 24)
         End
         Set $OldButtonLabelOut = {egrep 'WSP:} $CalledBy {:.*' "} $ConfFile {" 2>/dev/null}
         Set $OldButtonLabel = (GetOutput $OldButtonLabelOut 1 -1)

         If $OldButtonLabel == {} Then
         Begin
            Do {Exec exec echo 'WSP:} $CalledBy {:} $NewButtonLabel {' >> "} $ConfFile {"}
            Set $NewButtonLabelDisplay = { } $NewButtonLabel
         End
         Else
         Begin
            Do {Exec exec $[NSCDE_TOOLSDIR]/ised -c 's/^WSP:} $CalledBy {:.*/WSP:} $CalledBy {:} $NewButtonLabel {/g' -f "} $ConfFile {"}
            Set $NewButtonLabelDisplay = { } $NewButtonLabel
         End
         ChangeTitle $CalledBy $NewButtonLabelDisplay
         Do {DesktopName } (Add $CalledBy -1) { } $NewButtonLabel
         Do {SendToModule $[infostore.WSM] SendString 41 5 CHN } $CalledBy { } $NewButtonLabel
         HideWidget 24
         Set $Txt = 0
         ChangeTitle 22 {Close}
      End
      2 :
      Begin
         If $Txt == 0 Then
         Begin
            Quit
         End
         Else
         Begin
            HideWidget 24
            Set $Txt = 0
         End
      End
End

# Nasty workaround because ForeColor of the TextField
# widget is not applied and global value is used anyway.
# See end of the Init procedure for explanation.
Widget 25
   Property
   Size 40 10
   Position 10 10
   Type PushButton
   Flags NoReliefString NoFocus Hidden
   Title {XXXXXXXXXXXXXXXXXXXXXXXXXXX}
   Main
      Case message of
      SingleClic :
      Begin
      End
      1 :
      Begin
         ChangeColorset 25 20
         ChangeColorset 24 20
      End
End

