packages feed

manatee-core-0.0.8: Manatee/Core/PageFrame.hs

-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
-- 
-- Copyright (C) 2010 Andy Stewart, all rights reserved.
-- 
-- 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
-- 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.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

module Manatee.Core.PageFrame where

import Graphics.UI.Gtk hiding (Statusbar, statusbarNew)
import Manatee.Toolkit.General.String
import Manatee.Toolkit.Gtk.Gtk
import Manatee.Toolkit.Gtk.ScrolledWindow
import Manatee.Toolkit.Widget.Outputbar
import Manatee.Toolkit.Widget.Statusbar

data PageFrame =
    PageFrame {pageFrameBox                 :: VBox           -- box for contain `PageView'
              ,pageFrameFrame               :: Frame          -- frame
              ,pageFrameScrolledWindow      :: ScrolledWindow -- scrolled window
              ,pageFrameOutputbar           :: Outputbar      -- outputbar for display message
              ,pageFrameStatusbar           :: Statusbar      -- statusbar
              }

-- | Create 'PageFrame'.
pageFrameNew :: IO PageFrame
pageFrameNew = do
  -- Create box.
  box <- vBoxNew False 0

  -- Body frame.
  frame <- frameNewWithShadowType Nothing
  boxPackStart box frame PackGrow 0 

  -- Scrolled Window.
  scrolledWindow <- scrolledWindowNew_
  frame `containerAdd` scrolledWindow

  -- Outputbar.
  outputbar <- outputbarNew
  
  -- Statusbar.
  statusbar <- statusbarNew box

  return $ PageFrame box frame scrolledWindow outputbar statusbar

-- | Page frame new with mode name.
pageFrameNewWithModeName :: String -> IO PageFrame
pageFrameNewWithModeName name = do
  frame <- pageFrameNew
  pageFrameUpdateStatusbar frame "PageMode" ("Mode (" ++ name ++ ")")
  return frame

-- | Add child.
pageFrameAddChild :: WidgetClass widget => PageFrame -> widget -> IO ()  
pageFrameAddChild pageFrame widget =
  pageFrameScrolledWindow pageFrame `containerAdd` widget

-- | Show outputbar.
pageFrameShowOutputbar :: PageFrame -> String -> Maybe Int -> IO ()
pageFrameShowOutputbar pageFrame output limit = do
  let str = case limit of
              Just l  -> stripFormat output l
              Nothing -> output
  outputbarShow (pageFrameBox pageFrame) 
                (pageFrameOutputbar pageFrame) 
                str

-- | Update statusbar.
pageFrameUpdateStatusbar :: PageFrame -> String -> String -> IO ()
pageFrameUpdateStatusbar pageFrame = 
    statusbarInfoItemUpdate (pageFrameStatusbar pageFrame) 

-- | Update statusbar.
pageFrameUpdateProgress :: PageFrame -> Double -> IO ()
pageFrameUpdateProgress pageFrame = 
    statusbarProgressUpdate (pageFrameStatusbar pageFrame)