packages feed

systranything-0.1.3.0: lib/Model/SubMenu.hs

{-# LANGUAGE TemplateHaskell #-}

module Model.SubMenu (SubMenu (..), newItem) where

import Data.Aeson.TH (deriveJSON)
import Data.List.NonEmpty (NonEmpty)
import Data.Text (Text)
import GHC.Generics (Generic)
import GI.Gtk qualified as Gtk
import Model.Internal (options)
import Model.Item (Item, populate)

data SubMenu = MkSubMenu
  { suLabel :: Text,
    suItems :: NonEmpty Item
  }
  deriving stock (Eq, Generic, Show)

$(deriveJSON options ''SubMenu)

newItem :: Bool -> SubMenu -> IO Gtk.MenuItem
newItem verbose (MkSubMenu {..}) = do
  subMenu <- populate verbose suItems
  item <- Gtk.menuItemNewWithLabel suLabel
  Gtk.menuItemSetSubmenu item $ Just subMenu
  pure item