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

WindowTitle {Occupy Workspace}
WindowSize 296 296
Colorset 22

Init
Begin
   If $WinName == {} Then
   Begin
      ChangeTitle 9 {Select Workspace, pick a Window.}
   End
   Else
   Begin
      ChangeTitle 9 $WinName
   End

   # WarpPointer 2
   Key Escape A 2 1 {Quit}
   Key H A 6 1 {DisplayHelp}
   Key Help A 6 1 {DisplayHelp}
   Key F1 A 6 1 {DisplayHelp}
   Key A A 3 1 {AllWSPToggle}
   Key Return A 2 3 {Move}
   Key Return C 2 3 {MoveGo}
   Key Down A 2 2 {Down}
   Key Up A 2 2 {Up}

   Set $BtnFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s medium -Z 14} 1 -1)
   ChangeFont 5 $BtnFont
   ChangeFont 6 $BtnFont
   ChangeFont 8 $BtnFont

   Set $LabelFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s medium -Z 11} 1 -1)
   ChangeFont 1 $LabelFont
   ChangeFont 2 $LabelFont
   ChangeFont 4 $LabelFont

   Set $SmallFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s small -Z 10.5} 1 -1)
   ChangeFont 3 $SmallFont
   ChangeFont 10 $SmallFont
   ChangeFont 9 $SmallFont

   Set $GoWithWindow = 0
End

Widget 1
   Property
   Size 4 20
   Position 4 10
   Type ItemDraw
   Flags NoReliefString
   Title {Window: }
   Font "xft:::pixelsize=15"
   Colorset 22
   Main
      Case message of
      1 :
      Begin
         ChangeValue 2 (Add (LastString) 1)
         If $DeskNo == {} Then
         Begin
            Set $DeskNo = (Add (LastString) 1)
         End
      End
      2 :
      Begin
         Set $WorkSpaces = (LastString)
         ChangeTitle 2 $WorkSpaces
      End
End

Widget 4
   Property
   Size 4 20
   Position 4 38
   Type ItemDraw
   Flags NoReliefString
   Title {Workspaces:      }
   Font "xft:::pixelsize=15"
   Colorset 22
End

Widget 2
   Property
   Size 178 134
   Position 110 42
   Type List
   Flags NoReliefString
   Title {}
   Colorset 22
   Main
      Case message of
      SingleClic :
      Begin
         Set $DeskNo = (GetValue 2)
         If $WinName == {} Then
         Begin
            Do {Pick () SendToModule OccupyWorkspace SendString 9 1 $[w.id] $[w.name]}
         End
      End
      1 :
      Begin
         Set $qstr = (LastString)
         If $qstr == {Quit} Then
         Begin
            Quit
         End
      End
      2 :
      Begin
         If (LastString) == {Down} Then
         Begin
            Set $MaxElementsOut = {MaxDesk=$(echo '} (GetTitle 2) {' | tr "|" "\n" | wc -l); MaxDesk=$(($MaxDesk - 1)); echo $MaxDesk}
            Set $MaxElements = (GetOutput $MaxElementsOut 1 1)
            If (GetValue 2) <= $MaxElements Then
            Begin
               Set $NextValue = (Add (GetValue 2) 1)
               ChangeValue 2 $NextValue
               Set $DeskNo = $NextValue
            End
            Else
            Begin
               ChangeValue 2 1
               Set $DeskNo = 1
            End
         End
         If (LastString) == {Up} Then
         Begin
               Set $PrevValue = (Add (GetValue 2) -1)
               If $PrevValue >= 1 Then
               Begin
                  ChangeValue 2 $PrevValue
                  Set $DeskNo = $PrevValue
               End
               Else
               Begin
                  Set $MaxElementsFromOne = (Add $MaxElements 1)
                  ChangeValue 2 $MaxElementsFromOne
                  Set $DeskNo = $MaxElementsFromOne
               End
         End
      End
      3 :
      Begin
         If (LastString) == {Move} Then
         Begin
            SendSignal 5 1
         End
         If (LastString) == {MoveGo} Then
         Begin
            SendSignal 10 1
            SendSignal 5 1
         End
      End
End

Widget 3
   Property
   Size 100 20
   Position 112 184
   Type CheckBox
   Value 0
   Flags NoReliefString
   Title { All Workspaces}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 3 1
      End
      1 :
      Begin
         # Keyboard "A" handling
         If (LastString) == {AllWSPToggle} Then
         Begin
            If (GetValue 3) == 0 Then
            Begin
               ChangeValue 3 1
            End
            Else
            Begin
               ChangeValue 3 0
            End
         End

         # Called with click
         If (GetValue 3) == 1 Then
         Begin
            If $WinName == {} Then
            Begin
               Do {Pick () SendToModule OccupyWorkspace SendString 9 1 $[w.id] $[w.name]}
            End

            Set $OldDeskNo = $DeskNo
            Set $DeskNo = 999
            ChangeTitle 2 { All Workspaces}
            ChangeValue 2 1
         End
         If (GetValue 3) == 0 Then
         Begin
            ChangeTitle 2 $WorkSpaces
            ChangeValue 2 $OldDeskNo
            Set $DeskNo = $OldDeskNo
         End
      End
End

Widget 10
   Property
   Size 100 20
   Position 112 214
   Type CheckBox
   Value 0
   Flags NoReliefString
   Title { Go With the Window}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 10 1
      End
      1 :
      Begin
         Set $GoWithWindow = 1
      End
End

Widget 5
   Property
   Size 80 20
   Position 8 260
   Type PushButton
   Flags NoReliefString
   Title {OK}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 5 1
      End
      1 :
      Begin
         If $DeskNo == 999 Then
         Begin
            Do {WindowId } $WinId { StickAcrossDesks}
         End
         Else
         Begin
            If $GoWithWindow == 0 Then
            Begin
               Do {f_Occupy } $WinId { MoveToDesk 0 } (Add $DeskNo -1) { Nop }
            End
            Else
            Begin
               Do {f_Occupy } $WinId { MoveToDesk 0 } (Add $DeskNo -1) { GoToDesk }
            End
         End
         Quit
      End
End

Widget 6
   Property
   Size 80 20
   Position 208 260
   Type PushButton
   Title {Help}
   Font "xft:::pixelsize=15"
   Flags NoReliefString
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 6 1
      End
      1 :
      Begin
         Do {f_DisplayURL "Occupy Workspace" $[NSCDE_ROOT]/share/doc/html/NsCDE-OccupyWorkspace.html}
      End
End

Widget 8
   Property
   Size 80 20
   Position 108 260
   Type PushButton
   Title {Dismiss}
   Font "xft:::pixelsize=15"
   Flags NoReliefString
   Main
      Case message of
      SingleClic :
      Begin
         Quit
      End
End

Widget 7
   Property
   Size 344 1
   Position 2 248
   Type Rectangle
End

Widget 9
   Property
   Size 226 20
   Position 74 10
   Type ItemDraw
   Flags NoReliefString Left
   Title {}
   Colorset 22
   Font "xft:::pixelsize=14"
   Main
      Case message of
      1 :
      Begin
         Set $WinIdPlusName = (LastString)

         If $WinIdPlusName == {$[w.id] $[w.name]} Then
         Begin
            Set $WinId = {}
               Set $WinName = {}
         End
         Else
         Begin
            Set $WinIdOut = {echo "} $WinIdPlusName {"}
            Set $WinId = (GetOutput $WinIdOut 1 1)
            Set $WinNameOut = {echo "} $WinIdPlusName {" | cut -d" " -f2-22 | fold -w 38 -s}
            Set $WinName = (GetOutput $WinNameOut 1 -1)
            Set $WinNameLenOut = {echo "} $WinName {" | wc -c}
            Set $WinNameLen = (GetOutput $WinNameLenOut 1 1)
            If $WinNameLen > 34 Then
            Begin
               Set $WinNameOut = {echo "} $WinName {" | fold -w 32 | sed "s/\(.\)\(.\)\(.\)$/...'/g"}
               Set $WinName = (GetOutput $WinNameOut 1 -1)
            End
            ChangeTitle 9 $WinName
         End
      End
End

