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

WindowTitle {Occupy Page}
WindowSize 296 296
Colorset 22

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

   Set $PageMatrixX = (GetScriptArgument 1)
   Set $PageMatrixY = (GetScriptArgument 2)

   # 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 {AllPgToggle}
   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 $PgIdX = 0
   Set $PgIdY = 0

   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
         Set $CurrentPageNumCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | grep '} (LastString) {'}
         Set $CurrentPageNum = (GetOutput $CurrentPageNumCmd 1 1)
         ChangeValue 2 $CurrentPageNum
         If $PageAddr == {} Then
         Begin
            Set $PageAddr = (LastString)
         End
      End
      2 :
      Begin
         Set $Pages = (LastString)
         ChangeTitle 2 $Pages
      End
End

Widget 4
   Property
   Size 4 20
   Position 4 38
   Type ItemDraw
   Flags NoReliefString
   Title {Pages:      }
   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 $PageNum = (GetValue 2)
         Set $PageAddrCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | egrep '^} $PageNum { '}
         Set $PageId = (GetOutput $PageAddrCmd 1 -1)
         Set $PgIdX = (StrCopy $PageId 3 3)
         Set $PgIdY = (StrCopy $PageId 5 5)
         If $WinName == {} Then
         Begin
            Do {Pick () SendToModule OccupyPage 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 = {MaxPage=$(echo '} (GetTitle 2) {' | tr "|" "\n" | wc -l); MaxPage=$(($MaxPage - 1)); echo $MaxPage}
            Set $MaxElements = (GetOutput $MaxElementsOut 1 1)
            If (GetValue 2) <= $MaxElements Then
            Begin
               Set $NextValue = (Add (GetValue 2) 1)
               ChangeValue 2 $NextValue
               Set $PageAddrCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | egrep '^} $NextValue { '}
               Set $PageId = (GetOutput $PageAddrCmd 1 -1)
               Set $PgIdX = (StrCopy $PageId 3 3)
               Set $PgIdY = (StrCopy $PageId 5 5)
               Set $NextPgId = $PgIdX { } $PgIdY
               Set $PageAddr = $NextPgId
            End
            Else
            Begin
               ChangeValue 2 1
               Set $PageAddr = 1
            End
         End
         If (LastString) == {Up} Then
         Begin
               Set $PrevValue = (Add (GetValue 2) -1)
               If $PrevValue >= 1 Then
               Begin
                  ChangeValue 2 $PrevValue
                  Set $PageAddrCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | egrep '^} $PrevValue { '}
                  Set $PageId = (GetOutput $PageAddrCmd 1 -1)
                  Set $PgIdX = (StrCopy $PageId 3 3)
                  Set $PgIdY = (StrCopy $PageId 5 5)
                  Set $PrevPgId = $PgIdX { } $PgIdY
                  Set $PageAddr = $PrevPgId
               End
               Else
               Begin
                  Set $MaxElementsFromOne = (Add $MaxElements 1)
                  ChangeValue 2 $MaxElementsFromOne
                  Set $PageAddrCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | egrep '^} $MaxElementsFromOne { '}
                  Set $PageId = (GetOutput $PageAddrCmd 1 -1)
                  Set $PgIdX = (StrCopy $PageId 3 3)
                  Set $PgIdY = (StrCopy $PageId 5 5)
                  Set $MaxPlusOnePgId = $PgIdX { } $PgIdY
                  Set $PageAddr = $MaxPlusOnePgId
               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 Pages}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 3 1
      End
      1 :
      Begin
         # Keyboard "A" handling
         If (LastString) == {AllPgToggle} 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 OccupyPage SendString 9 1 $[w.id] $[w.name]}
            End

            Set $OldPageAddr = $PageAddr
            Set $PageAddr = 999
            ChangeTitle 2 { All Pages}
            ChangeValue 2 1
         End
         If (GetValue 3) == 0 Then
         Begin
            ChangeTitle 2 $Pages
            ChangeValue 2 $OldPageAddr
            Set $PageAddr = $OldPageAddr
         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 $PageAddr == 999 Then
         Begin
            Do {WindowId } $WinId { StickAcrossPages}
         End
         Else
         Begin
            If $GoWithWindow == 0 Then
            Begin
               Do {f_Occupy } $WinId { MoveToPage } $PgIdX { } $PgIdY { Nop }
            End
            Else
            Begin
               Do {f_Occupy } $WinId { MoveToPage } $PgIdX { } $PgIdY { GoToPage }
            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 Page" $[NSCDE_ROOT]/share/doc/html/NsCDE-OccupyPage.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
   Flags Left
   Title {}
   Font "xft:::pixelsize=14"
   Colorset 22
   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

