content: -- Copyright 2013 Evan Laforge
  -- This program is distributed under the terms of the GNU General Public
  -- License 3.0, see COPYING or http://www.gnu.org/licenses/gpl-3.0.txt
  
  -- | Miscellaneous low level types with few dependencies.
  module Ui.Types (
      TrackNum, Width, MouseButton, ChunkNum, Orientation(..), invert
  ) where
  import qualified Data.Text as Text
  
  import qualified Util.Pretty as Pretty
  import qualified Util.Serialize as Serialize
  
  
  -- | Index into a block's tracks.
  type TrackNum = Int
  -- | Width of a track in pixels.
  type Width = Int
  -- | Mouse button number.
  type MouseButton = Int
  
  -- | Audio chunk index.  This corresponds to the 001.wav files generated by the
  -- im synthesizer.
  type ChunkNum = Int
  
  -- * orientation
  
  -- | Whether the event is front-weighted or back-weighted.  In the event this
  -- is represented with positive or negative duration.
  data Orientation = Negative | Positive
      deriving (Eq, Ord, Read, Show, Enum, Bounded)
      -- The Negative to Positive order is important, because that affects the
      -- EventMap's sort order, which functions in "Ui.Events" rely on.
  instance Pretty.Pretty Orientation where pretty = Text.pack . show
  
  invert :: Orientation -> Orientation
  invert Positive = Negative
  invert Negative = Positive
  
  instance Serialize.Serialize Orientation where
      put = Serialize.put_enum_unsafe
      get = Serialize.get_enum_unsafe
  