diff -r 000000000000 -r 7f656887cf89 commands/fed/src/screenmngr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commands/fed/src/screenmngr.cpp Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,97 @@ +// screenmngr.cpp +// +// Copyright (c) 2009 - 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Accenture - Initial contribution +// + +#include + +#include "screenmngr.h" +#include "viewbase.h" + +const TInt KCmdWndMinHeight = 3; +const TInt KCmdWndMinWidth = 20; +const TInt KRM = 1000; //const multiplication to avoid inexact calculations on small numbers + +void CScreenManager::ResizeScreenL(const TWindow& aWindow) + { + if(aWindow.iHeight < KCmdWndMinHeight + || aWindow.iWidth < KCmdWndMinWidth) + User::Leave(KErrNotSupported); + + if(aWindow == iScreenWnd) + return; + + //We need to leave one char on each side for the border around the console window, so the width/height is actually less by 2 + iMainWnd.iX = iCmdWnd.iX = aWindow.iX; + iMainWnd.iWidth = iCmdWnd.iWidth = aWindow.iWidth + KConsoleWidthCorrection; + iMainWnd.iY = aWindow.iY; + + //Based on proportions of windows on the old screen calculate proportions on the new screen + TInt newcmdh = 1; + if(iScreenWnd.iHeight) + { + newcmdh = ((iCmdWnd.iHeight*KRM) * (aWindow.iHeight*KRM)) / iScreenWnd.iHeight*KRM*KRM; + if(newcmdh >= aWindow.iHeight) + newcmdh = aWindow.iHeight/2; + } + iCmdWnd.iHeight = newcmdh > 0 ? newcmdh : 1; + iMainWnd.iHeight = aWindow.iHeight - iCmdWnd.iHeight + KConsoleWidthCorrection; + iCmdWnd.iY = aWindow.iY + iMainWnd.iHeight; + iScreenWnd = aWindow; + + if(iCurrentView) + iCurrentView->ResizeL(iMainWnd); + } + +const TWindow& CScreenManager::ResizeCommandWindowL(TInt aHeight) + { + if(aHeight == iCmdWnd.iHeight) + return iCmdWnd; + + //resize the main and cmd windows + if(aHeight > iScreenWnd.iHeight) + aHeight = iScreenWnd.iHeight; + + iCmdWnd.iHeight = aHeight; + iMainWnd.iHeight = iScreenWnd.iHeight - iCmdWnd.iHeight; + iCmdWnd.iY = iScreenWnd.iY + iMainWnd.iHeight; + + if(iCurrentView) + iCurrentView->ResizeL(iMainWnd); + + return iCmdWnd; + } + +void CScreenManager::AddViewL(MViewController& aView) + { + //Here create a new window if necessary + AttachViewL(aView); + } + +void CScreenManager::AttachViewL(MViewController& aView) + { + if(iCurrentView) + { + iCurrentView->DeactivateL(); + } + + iCurrentView = &aView; + iCurrentView->RedrawL(iMainWnd); + } + +void CScreenManager::UnsetCurrentView() + { + iCurrentView = NULL; + } + +void CScreenManager::RefreshScreenL() + { + if (iCurrentView) iCurrentView->RedrawL(iMainWnd); + }