vision-0.0.5.0: src/Collection/Select.hs
-- -*-haskell-*-
-- Vision (for the Voice): an XMMS2 client.
--
-- Author: Oleg Belozeorov
-- Created: 6 Jul. 2011
--
-- Copyright (C) 2011 Oleg Belozeorov
--
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License as
-- published by the Free Software Foundation; either version 3 of
-- the License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- General Public License for more details.
--
{-# LANGUAGE NoMonoLocalBinds #-}
module Collection.Select
( Select (..)
, mkSelect
) where
import Data.IORef
import Graphics.UI.Gtk hiding (focus)
import XMMS2.Client
import Utils
import Compound
import Collection.Common
import Collection.Tracks
import Collection.PropFlt
import Collection.Combo
import Collection.Utils
data Select
= S { sCombo :: ComboBox
, sColl :: Coll
, sBox :: VBox
, sNextRef :: IORef VI
}
instance ViewItem Select where
nextVIRef = sNextRef
mkSelect env coll = do
nextRef <- newIORef None
box <- vBoxNew False 5
combo <- mkCombo env
let s = S { sCombo = combo
, sBox = box
, sColl = coll
, sNextRef = nextRef
}
boxPackStart box combo PackNatural 0
let setup w = do
setNext s w
onCollBuilt env w $ mkSelect env
boxPackStartDefaults box $ outer w
widgetGrabFocus $ focus w
combo `on` changed $ do
iter <- comboBoxGetActiveIter combo
withJust iter $ \iter -> do
cur <- listStoreGetValue (eCModel env) $ listStoreIterToIndex iter
case cur of
CITracks -> setup =<< mkTrackView env coll
CIProp pr -> setup =<< mkPropFlt env pr coll
CISeparator -> return ()
widgetShowAll box
return s
instance CompoundWidget Select where
type Outer Select = VBox
outer = sBox
instance FocusChild Select where
type Focus Select = ComboBox
focus = sCombo