content: {-# Language OverloadedStrings, TemplateHaskell #-}
  {-|
  Module      : Client.Commands.Toggles
  Description : View modality command implementations
  Copyright   : (c) Eric Mertens, 2016-2020
  License     : ISC
  Maintainer  : emertens@gmail.com
  -}
  
  module Client.Commands.Toggles (togglesCommands) where
  
  import Client.Commands.Docs (togglesDocs, cmdDoc)
  import Client.Commands.TabCompletion (noClientTab)
  import Client.Commands.Types
  import Client.Configuration (EditMode(SingleLineEditor, MultiLineEditor), LayoutMode(OneColumn, TwoColumn))
  import Client.State
  import Control.Lens (over, set)
  
  togglesCommands :: CommandSection
  togglesCommands = CommandSection "View toggles"
  
    [ Command
        (pure "toggle-detail")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-detail")
      $ ClientCommand cmdToggleDetail noClientTab
  
    , Command
        (pure "toggle-activity-bar")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-activity-bar")
      $ ClientCommand cmdToggleActivityBar noClientTab
  
    , Command
        (pure "toggle-show-ping")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-show-ping")
      $ ClientCommand cmdToggleShowPing noClientTab
  
    , Command
        (pure "toggle-metadata")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-metadata")
      $ ClientCommand cmdToggleMetadata noClientTab
  
    , Command
        (pure "toggle-layout")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-layout")
      $ ClientCommand cmdToggleLayout noClientTab
  
    , Command
        (pure "toggle-editor")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-editor")
      $ ClientCommand cmdToggleEditor noClientTab
  
    , Command
        (pure "toggle-edit-lock")
        (pure ())
        $(togglesDocs `cmdDoc` "toggle-edit-lock")
      $ ClientCommand cmdToggleEditLock noClientTab
    ]
  
  cmdToggleDetail :: ClientCommand ()
  cmdToggleDetail st _ = commandSuccess (over clientDetailView not st)
  
  cmdToggleActivityBar :: ClientCommand ()
  cmdToggleActivityBar st _ = commandSuccess (over clientActivityBar not st)
  
  cmdToggleShowPing :: ClientCommand ()
  cmdToggleShowPing st _ = commandSuccess (over clientShowPing not st)
  
  cmdToggleMetadata :: ClientCommand ()
  cmdToggleMetadata st _ = commandSuccess (clientToggleHideMeta st)
  
  cmdToggleLayout :: ClientCommand ()
  cmdToggleLayout st _ = commandSuccess (set clientScroll 0 (over clientLayout aux st))
    where
      aux OneColumn = TwoColumn
      aux TwoColumn = OneColumn
  
  cmdToggleEditor :: ClientCommand ()
  cmdToggleEditor st _ = commandSuccess (over clientEditMode aux st)
    where
      aux SingleLineEditor = MultiLineEditor
      aux MultiLineEditor = SingleLineEditor
  
  cmdToggleEditLock :: ClientCommand ()
  cmdToggleEditLock st _ = commandSuccess (over clientEditLock not st)
  