%% ``The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved via the world wide web at http://www.erlang.org/.
%% 
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%% 
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
%% AB. All Rights Reserved.''
%% 
%%     $Id$
%%


-module(tv_pd_frames).



-export([create_display_frames/4, resize_display_frames/3]).




-include("tv_int_def.hrl").
-include("tv_pd_int_def.hrl").







%%%*********************************************************************
%%% EXTERNAL FUNCTIONS
%%%*********************************************************************




%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


create_display_frames(WindowId, WindowWidth, WindowHeight, FrameP) ->
    {DisplayId, DisplayWidth, DisplayHeight} = 
	create_frame(WindowId, 
		     get_display_coords(WindowWidth, WindowHeight),
		     ?DEFAULT_BG_COLOR,
		     0),

    {ToolbarId, ToolbarWidth, ToolbarHeight} = create_toolbar_frame(DisplayId, 
								    DisplayWidth),

    {SheetFrameId, SheetBgFrameId, SheetFrameWidth, SheetFrameHeight} = 
	create_sheet_frames(DisplayId, 
			    DisplayWidth, 
			    DisplayHeight),

    {GridFrameId, GridBgFrameId, GridFrameWidth, GridFrameHeight} = 
	create_grid_frames(SheetFrameId, 
			   SheetFrameWidth, 
			   SheetFrameHeight),
    
    
    FrameP#frame_params{display_id           = DisplayId,
			toolbar_frame_id     = ToolbarId,
			toolbar_frame_width  = ToolbarWidth,
			toolbar_frame_height = ToolbarHeight,
			sheet_frame_id       = SheetFrameId,
			sheet_frame_width    = SheetFrameWidth,
			sheet_frame_height   = SheetFrameHeight,
			sheet_bgframe_id     = SheetBgFrameId,
			grid_frame_id        = GridFrameId,
			grid_frame_width     = GridFrameWidth,
			grid_frame_height    = GridFrameHeight,
			grid_bgframe_id      = GridBgFrameId
			}.







%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


resize_display_frames(NewW, NewH, FrameP) ->
    #frame_params{display_id         = DispId,
		  toolbar_frame_id   = ToolbarId,
		  sheet_frame_id     = SheetFgId,
		  sheet_bgframe_id   = SheetBgId,
		  grid_frame_id      = GridFgId,
		  grid_bgframe_id    = GridBgId}  = FrameP,
    
    {NewDispW, NewDispH} = config_frame(DispId, get_display_coords(NewW, NewH)),
    {NewToolW, NewToolH} = resize_toolbar(ToolbarId, NewDispW),
    {NewSheetFgW, NewSheetFgH} = resize_sheet_frames(SheetFgId, SheetBgId, NewDispW,
						     NewDispH),

    {NewGridFgW, NewGridFgH} = resize_grid_frames(GridFgId, GridBgId, NewSheetFgW, 
						  NewSheetFgH),
    
    FrameP#frame_params{toolbar_frame_width  = NewToolW,
			toolbar_frame_height = NewToolH,
			sheet_frame_width    = NewSheetFgW,
			sheet_frame_height   = NewSheetFgH,
			grid_frame_width     = NewGridFgW,
			grid_frame_height    = NewGridFgH
			}.








%%%********************************************************************
%%% INTERNAL FUNCTIONS
%%%********************************************************************





%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


config_frame(Id, {Width, Height, Xpos, Ypos}) ->
    gs:config(Id, [{width, Width},
		   {height, Height},
		   {x, Xpos},
		   {y, Ypos}
		  ]),
    {Width, Height}.







%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


create_frame(ParentId, {Width, Height, Xpos, Ypos}, Color, BorderWidth) ->
    Id = gs:frame(ParentId, [{width, Width},
			     {height, Height},
			     {x, Xpos},
			     {y, Ypos},
			     {bw, BorderWidth},
			     {bg, Color}
			    ]),
    {Id, Width, Height}.









%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


create_grid_frames(SheetFrameId, SheetFrameWidth, SheetFrameHeight) ->
    {BgId, _W, _H} = 
	create_frame(SheetFrameId,
		     get_grid_frame_coords(bg, SheetFrameWidth, SheetFrameHeight),
		     ?BLACK, 
		     0),
    {FgId, FgWidth, FgHeight} = 
	create_frame(SheetFrameId, 
		     get_grid_frame_coords(fg, SheetFrameWidth, SheetFrameHeight),
		     ?DEFAULT_BG_COLOR, 
		     0),
    {FgId, BgId, FgWidth, FgHeight}.
    
    






%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


create_sheet_frames(DispId, DispWidth, DispHeight) ->
    {BgId, _W, _H} = create_frame(DispId, 
				  get_sheet_frame_coords(bg, DispWidth, DispHeight),
				  ?BLACK, 
				  0),
    {FgId, FgWidth, FgHeight} = 
	create_frame(DispId, 
		     get_sheet_frame_coords(fg, DispWidth, DispHeight), 
		     ?DEFAULT_BG_COLOR, 
		     0),
    {FgId, BgId, FgWidth, FgHeight}.







%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


create_toolbar_frame(DispId, DispWidth) ->
    create_frame(DispId, get_toolbar_coords(DispWidth), ?DEFAULT_BG_COLOR, 0).







%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_display_coords(WindowWidth, WindowHeight) ->
    Xpos = 4,
    {WindowWidth - 2 * Xpos, WindowHeight - ?MENUBAR_HEIGHT - Xpos, Xpos, ?MENUBAR_HEIGHT}.








%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_grid_frame_coords(bg, FrameWidth, FrameHeight) ->
    get_grid_frame_coords2(FrameWidth, FrameHeight, 0);
get_grid_frame_coords(fg, FrameWidth, FrameHeight) ->
    get_grid_frame_coords2(FrameWidth, FrameHeight, 1).








%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_grid_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
    Xpos   = 0,
    Ypos   = 0,
    Width  = FrameWidth - ?VSCALE_WIDTH - Xpos - BorderWidth,
    Height = FrameHeight - ?HSCALE_HEIGHT - Ypos - BorderWidth,
    {Width, Height, Xpos, Ypos}.
    





%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_sheet_frame_coords(bg, FrameWidth, FrameHeight) ->
    get_sheet_frame_coords2(FrameWidth, FrameHeight, 0);
get_sheet_frame_coords(fg, FrameWidth, FrameHeight) ->
    get_sheet_frame_coords2(FrameWidth, FrameHeight, 1).








%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_sheet_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
    Xpos   = BorderWidth,
    Ypos   = ?TOOLBAR_HEIGHT + BorderWidth,
    Width  = FrameWidth - 2 * BorderWidth,
    Height = FrameHeight - Ypos - ?MISC_AREA_HEIGHT - BorderWidth,
    {Width, Height, Xpos, Ypos}.


    





%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


get_toolbar_coords(DispWidth) ->
    Xpos = 0,
    {DispWidth - 2 * Xpos, ?TOOLBAR_HEIGHT, Xpos, 0}.





    



%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


resize_grid_frames(FgId, BgId, ParentWidth, ParentHeight) ->
    config_frame(BgId, get_grid_frame_coords(bg, ParentWidth, ParentHeight)),
    config_frame(FgId, get_grid_frame_coords(fg, ParentWidth, ParentHeight)).

    








%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


resize_sheet_frames(FgId, BgId, ParentWidth, ParentHeight) ->
    config_frame(BgId, get_sheet_frame_coords(bg, ParentWidth, ParentHeight)),
    config_frame(FgId, get_sheet_frame_coords(fg, ParentWidth, ParentHeight)).
		 
    







%%======================================================================
%% Function:      
%%
%% Return Value:  
%%
%% Description:   
%%
%% Parameters:    
%%======================================================================


resize_toolbar(Id, DispWidth) ->
    config_frame(Id, get_toolbar_coords(DispWidth)).



