summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Panel.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Phi/Panel.hs')
-rw-r--r--lib/Phi/Panel.hs32
1 files changed, 25 insertions, 7 deletions
diff --git a/lib/Phi/Panel.hs b/lib/Phi/Panel.hs
index 42f4f98..b15f6ab 100644
--- a/lib/Phi/Panel.hs
+++ b/lib/Phi/Panel.hs
@@ -4,10 +4,13 @@ module Phi.Panel ( Position(..)
, Panel(..)
, PanelClass(..)
, (<~>)
+ , PanelConfig(..)
+ , defaultPanelConfig
, separator
) where
import Data.Function
+import Data.Monoid
data Position = Top | Bottom
@@ -17,21 +20,36 @@ class PanelClass a where
weight :: a -> Float
weight _ = 0
-data Panel = forall a. PanelClass a => Panel a
+data Panel = forall a. PanelClass a => Panel a | CompoundPanel [Panel]
+
+instance Monoid Panel where
+ mempty = CompoundPanel []
+ mappend a b = makePanel $ (toList a) ++ (toList b)
+ where
+ toList (Panel p) = [Panel p]
+ toList (CompoundPanel panels) = panels
+
+ makePanel [p] = p
+ makePanel panels = CompoundPanel panels
instance PanelClass Panel where
minSize (Panel p) = minSize p
+ minSize (CompoundPanel panels) = sum $ map minSize panels
+
weight (Panel p) = weight p
+ weight (CompoundPanel panels) = sum $ map weight panels
-data CompoundPanel = CompoundPanel Panel Panel
+(<~>) :: Panel -> Panel -> Panel
+(<~>) = mappend
-instance PanelClass CompoundPanel where
- minSize (CompoundPanel a b) = ((+) `on` minSize) a b
- weight (CompoundPanel a b) = ((+) `on` weight) a b
-(<~>) :: Panel -> Panel -> Panel
-a <~> b = Panel $ CompoundPanel a b
+data PanelConfig = PanelConfig { panelPosition :: Position
+ , panelSize :: Int
+ , panelContent :: Panel
+ }
+defaultPanelConfig :: PanelConfig
+defaultPanelConfig = PanelConfig { panelPosition = Top, panelSize = 24, panelContent = mempty }
data Separator = Separator Int Float