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

UseGettext {$NSCDE_ROOT/share/locale;NsCDE-SysActionDialog}
WindowLocaleTitle {   NsCDE: System Action   }
WindowSize 460 210
Colorset 22

Init
Begin
   WarpPointer 7

   Set $FontBoldMedium = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t bold -s medium -Z 14} 1 -1)
   ChangeFont 7 $FontBoldMedium

   Set $FontNormalMedium = (GetOutput {$NSCDE_TOOLSDIR/getfont -v -t normal -s medium -Z 11.5} 1 -1)
   ChangeFont 2 $FontNormalMedium
   ChangeFont 3 $FontNormalMedium
   ChangeFont 4 $FontNormalMedium
   ChangeFont 5 $FontNormalMedium

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

   # Modes:
   # 1. Logout
   # 2. FVWM restart
   # 3. Failsafe X (xterm)
   # 4. OS Shutdown
   # 5. OS Reboot
   # 6. OS Suspend
   # 6. OS Hybrid Suspend
   # 8. OS Hibernate

   # Flow of options:
   # If command line option number is passed, use that
   # If wrong option number, popup error message and quit
   # If no option number passed, search $FVWM_USERDIR/.SysActionDialog.lastval for last executed
   # If no last executed found or valid, select option number 1 - logout
   If (GetScriptArgument 1) <> {} Then
   Begin
      Set $CheckScrArgCmd = {echo '} (GetScriptArgument 1) {' | egrep '^[1-8]$' 2>/dev/null}
      Set $CheckScrArg = (GetOutput $CheckScrArgCmd 1 1)
      If $CheckScrArg <> {} Then
      Begin
         ChangeValue 4 $CheckScrArg
      End
      Else
      Begin
         Do {f_Notifier "System Action" "Dismiss" "NsCDE/Error.xpm" "Wrong option number passed to System Action Dialog. Exiting."}
         Quit
      End
   End
   Else
   Begin
      Set $ReadLastVal = (GetOutput {egrep '^[0-8]$' "$FVWM_USERDIR/.SysActionDialog.lastval" 2>/dev/null} 1 1)
      If $ReadLastVal <> {} Then
      Begin
         If $ReadLastVal == 0 Then
         Begin
            ChangeValue 4 1
            ChangeValue 5 0
            Set $ReadLastVal = (GetValue 4)
         End
         Else
         Begin
            ChangeValue 4 $ReadLastVal
         End
      End
      Else
      Begin
         ChangeValue 4 1
         Set $ReadLastVal = (GetValue 4)
      End
   End

   Set $SuspendTxt = {|   OS Suspend/Sleep (not supported)}
   Set $HybridSuspendTxt = {|   OS Hybrid Suspend (not supported)}
   Set $HibernateTxt = {|   OS Hibernate (not supported)}

   Set $SuspendSupport = (GetOutput {(true --suspend || false) ; echo $?} 1 1)
   If $SuspendSupport == 0 Then
   Begin
      Set $SuspendTxt = {|   Operating System: Suspend/Sleep}
      Set $SuspendNoErr = 1
   End

   Set $HybridSuspendSupport = (GetOutput {(true --suspend-hybrid || false) ; echo $?} 1 1)
   If $HybridSuspendSupport == 0 Then
   Begin
      Set $HybridSuspendTxt = {|   Operating System: Hybrid Suspend}
      Set $HybridSuspendNoErr = 1
   End

   Set $HibernateSupport = (GetOutput {(true --hibernate || false) ; echo $?} 1 1)
   If $HibernateSupport == 0 Then
   Begin
      Set $HibernateTxt = {|   Operating System: Hibernate}
      Set $HibernateNoErr = 1
   End

   Set $PopupTitle = {   X Window System: Logout}
                     {|   X Window System: Window Manager Restart}
                     {|   X Window System: Failsafe (xterm)}
                     {|   Operating System: Shutdown}
                     {|   Operating System: Reboot}
                      $SuspendTxt
                      $HybridSuspendTxt
                      $HibernateTxt

   ChangeLocaleTitle 4 $PopupTitle
   ChangeLocaleTitle 5 (GetTitle 5)

   # Key bindings
   Key Escape A 8 1 {KeyDismiss}
   Key Q C 8 1 {KeyDismiss}
   Key R A 5 1 {KeyRemember}
   Key Return C 7 1 {KeyConfirm}
   Key Down A 4 1 {KeyDown}
   Key Up A 4 1 {KeyUp}
   Key F1 A 9 1 {KeyHelp}
   Key Help A 9 1 {KeyHelp}

   Do {CursorStyle ROOT cursors/CursorExit.xpm}

   # X compositor bug workaround
   Set $RedrawSelf = (GetOutput {echo $NSCDE_REDRAW_WORKAROUND} 1 1)
End

Widget 1
   Property
   Size 20 32
   Position 16 20
   Type ItemDraw
   Flags NoReliefString NoFocus
   Title {}
   Colorset 22
   Icon NsCDE/Question.xpm
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 2
  Property
  Size 160 0
  Position 56 18
  Type ItemDraw
  Flags NoReliefString Left NoFocus
  LocaleTitle {User Confirmation:}
  Font "xft:::pixelsize=15"
  Colorset 22
  Main
     Case message of
     SingleClic :
     Begin
     End
End

Widget 3
   Property
   Size 380 0
   Position 56 36
   Type ItemDraw
   Flags NoReliefString Left NoFocus
   LocaleTitle {X Window System or Operating System Action}
   Font "xft:::pixelsize=15"
   Colorset 22
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 4
   Property
   Size 300 20
   Position 20 74
   Type PopupMenu
   Value 0
   Flags NoReliefString
   Title {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
   Font "xft:::pixelsize=15"
   Main
      Case message of
      SingleClic :
      Begin
         # X compositor bug workaround
         If $RedrawSelf == 1 Then
         Begin
            ChangeValue 4 (GetValue 4)
         End
      End
      1 :
      Begin
         If (LastString) == {KeyDown} Then
         Begin
            Set $CurrVal = (GetValue 4)
            If $CurrVal < 7 Then
            Begin
               Set $NewVal = (Add $CurrVal 1)
               ChangeValue 4 $NewVal
            End
            Else
            Begin
               Set $NewVal = 1
               ChangeValue 4 $NewVal
            End
         End

         If (LastString) == {KeyUp} Then
         Begin
            Set $CurrVal = (GetValue 4)
            If $CurrVal <> 1 Then
            Begin
               Set $NewVal = (Add $CurrVal -1)
               ChangeValue 4 $NewVal
            End
            Else
            Begin
               Set $NewVal = 7
               ChangeValue 4 $NewVal
            End
         End
      End
End

Widget 5
   Property
   Position 20 120
   Size 420 20
   Flags NoReliefString
   Type CheckBox
   Font "xft:::pixelsize=14"
   Value 1
   Title { Remember Last Action                  }
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 5 2
      End
      1 :
      Begin
         If (GetValue 5) == 0 Then
         Begin
            ChangeValue 5 1
            SendSignal 5 2
         End
         Else
         Begin
            ChangeValue 5 0
            SendSignal 5 2
         End
      End
      2 :
      Begin
         If (GetValue 5) == 0 Then
         Begin
            Set $ToggleLastValCmd = {echo "0" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $ToggleLastVal = (GetOutput $ToggleLastValCmd 1 -1)
         End
         Else
         Begin
            Set $ToggleLastValCmd = {echo "} $ReadLastVal {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $ToggleLastVal = (GetOutput $ToggleLastValCmd 1 -1)
         End
      End
End

Widget 6
Property
   Size 464 1
   Position 2 156
   Type Rectangle
   Main
      Case message of
      SingleClic :
      Begin
      End
End

Widget 7
Property
   Size 100 20
   Position 20 170
   Type PushButton
   Flags NoReliefString
   LocaleTitle {Confirm}
   Font "xft:::pixelsize=15"
   Main
   Case message of
   SingleClic :
   Begin
      SendSignal 7 1
   End
   1 :
   Begin
      # X11 WM Quit
      If (GetValue 4) == 1 Then
      Begin
         If (GetValue 5) <> 0 Then
         Begin
            Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
         End
         Do {CursorStyle ROOT left_ptr}
         Do {Module FvwmScript WaitNotice "NsCDE" "$[gt.Logging out]" "..." 2000}
         Do {f_QuitAndExit}
         Quit
      End

      # X11 WM Restart
      If (GetValue 4) == 2 Then
      Begin
         If (GetValue 5) <> 0 Then
         Begin
            Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
         End
         Do {Restart}
         Quit
      End

      # X11 Failsafe
      If (GetValue 4) == 3 Then
      Begin
         If (GetValue 5) <> 0 Then
         Begin
            Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
         End
         Do {CursorStyle ROOT left_ptr}
         Do {Restart xterm -n '"X Console"' -T '"X Console"'}
         Quit
      End

      # OS Shutdown
      If (GetValue 4) == 4 Then
      Begin
         If (GetValue 5) <> 0 Then
         Begin
            Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
         End
         Do {f_QuitAndShutdown poweroff}
         Quit
      End

      # OS Reboot
      If (GetValue 4) == 5 Then
      Begin
         If (GetValue 5) <> 0 Then
         Begin
            Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
            Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
         End
         Do {f_QuitAndShutdown reboot}
         Quit
      End

      # OS Suspend / Sleep
      If (GetValue 4) == 6 Then
      Begin
         If $SuspendNoErr == 1 Then
         Begin
            If (GetValue 5) <> 0 Then
            Begin
               Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
               Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
            End
            Do {CursorStyle ROOT left_ptr}
            Do {Module FvwmScript WaitNotice "NsCDE" "$[gt.Suspending System]" "..." 1250}
            Do {Test (EnvMatch infostore.nscde_use_xscreensaver 1) Schedule 1000 f_Xscreensaver -lock}
            Do {Schedule 1500 Exec sudo -n $NSCDE_TOOLSDIR/acpimgr suspend || $NSCDE_TOOLSDIR/acpimgr suspend}
            Quit
         End
         Else
         Begin
            Do {f_Notifier "System Action" "Dismiss" "NsCDE/Warning.xpm" "Suspend/Sleep appears not to be supported on this system."}
         End
      End

      # OS Hybrid Suspend
      If (GetValue 4) == 7 Then
      Begin
         If $HybridSuspendNoErr == 1 Then
         Begin
            If (GetValue 5) <> 0 Then
            Begin
               Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
               Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
            End
            Do {CursorStyle ROOT left_ptr}
            Do {Module FvwmScript WaitNotice "NsCDE" "$[gt.Suspending System in hybrid mode]" "..." 1250}
            Do {Test (EnvMatch infostore.nscde_use_xscreensaver 1) Schedule 1000 f_Xscreensaver -lock}
            Do {Schedule 1500 Exec sudo -n $NSCDE_TOOLSDIR/acpimgr hybrid-suspend || $NSCDE_TOOLSDIR/acpimgr hybrid-suspend}
            Quit
         End
         Else
         Begin
            Do {f_Notifier "System Action" "Dismiss" "NsCDE/Warning.xpm" "Hybrid Suspend appears not to be supported on this system."}
         End
      End

      # OS Hibernate
      If (GetValue 4) == 8 Then
      Begin
         If $HibernateNoErr == 1 Then
         Begin
            If (GetValue 5) <> 0 Then
            Begin
               Set $StoreLastValCmd = {echo "} (GetValue 4) {" > "$FVWM_USERDIR/.SysActionDialog.lastval"}
               Set $StoreLastVal = (GetOutput $StoreLastValCmd 1 -1)
            End
            Do {CursorStyle ROOT left_ptr}
            Do {Module FvwmScript WaitNotice "NsCDE" "$[gt.Hibernating System]" "..." 1250}
            Do {Test (EnvMatch infostore.nscde_use_xscreensaver 1) Schedule 1000 f_Xscreensaver -lock}
            Do {Schedule 1500 Exec sudo -n $NSCDE_TOOLSDIR/acpimgr hibernate || $NSCDE_TOOLSDIR/acpimgr hibernate}
            Quit
         End
         Else
         Begin
            Do {f_Notifier "System Action" "Dismiss" "NsCDE/Warning.xpm" "Hibernate appears not to be supported on this system."}
         End
      End
   End
End

Widget 8
Property
   Size 100 20
   Position 180 170
   Type PushButton
   LocaleTitle {Dismiss}
   Font "xft:::pixelsize=15"
   Flags NoReliefString
   Main
      Case message of
      SingleClic :
      Begin
         SendSignal 8 1
      End
      1 :
      Begin
         Do {CursorStyle ROOT left_ptr}
         Quit
      End
End

Widget 9
Property
   Size 100 20
   Position 340 170
   Type PushButton
   LocaleTitle {Help}
   Font "xft:::pixelsize=15"
   Flags NoReliefString
   Main
   Case message of
   SingleClic :
   Begin
      SendSignal 9 1
   End
   1 :
   Begin
      Do {f_DisplayURL "$[gt.System Action Dialog]" html/basics_logging_out.html}
   End
End

