diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/BrowserAppInc/BrowserContentView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/BrowserAppInc/BrowserContentView.h Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,714 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Browser content view +* +* +*/ + + +#ifndef __BROWSERCONTENTVIEW_H +#define __BROWSERCONTENTVIEW_H + +// INCLUDES +#include +#include +#include +#include + +#include "BrowserAppViewBase.h" +#include "BrowserGotoPane.h" +#include +#include +#include +#include "WindowObserver.h" + +// FORWARD DECLARATIONS + +class TVwsViewId; +class CBrowserContentViewContainer; +class CBrowserContentViewZoomModeTimer; +class CBrowserBookmarksModel; +class CAknNavigationControlContainer; +class CFindItemMenu; +class CAknInfoPopupNoteController; +class CAknStylusPopUpMenu; +class CBrowserContentViewToolbar; +class CBrowserShortcutKeyMap; + +// CONSTANTS + +const TInt KStatusMessageMaxLength=40; + +//The Zoom tooltip won't disappear +const TInt KZoomModeShowDisableTime( 5* 1000 * 1000 ); // 5000 seconds - disable the timer + + +// STRUCTS + +struct TWindowsMenuItemsDimCheck + { + TBool dimOpenInNewWin; + TBool dimSwitchWin ; + TBool dimCloseWin ; + TBool dimAllowPopups ; + TBool dimBlockPopups ; + }; + +/** +* Declaration for Browser's content view. +* +* @lib Browser.app +* @since Series 60 1.2 +*/ +class CBrowserContentView : public CBrowserViewBase, + public MGotoPaneObserver, + public MBrCtlStateChangeObserver, + public MBrCtlCommandObserver, + public MAknToolbarObserver, + public MWindowObserver + { + public: + + /** + * Two-phased constructor. + * @param aApiProvider Reference to the API provider. + * @param aRect + */ + static CBrowserContentView* NewLC( MApiProvider& aApiProvider, TRect& aRect ); + + /** + * Destructor. + */ + ~CBrowserContentView(); + + /** + * Callback - we should initialize the list of DO elements. + * @since 1.2 + */ + void OptionListInitL(); + + /** + * Callback - we should add an element to the list of DO elements. + * @since 1.2 + */ + void OptionListAddItemL( + const TDesC& aText, + TUint32 aElemID, + TBool aIsPrevType ); + + /** + * Update the title. + * @since 1.2 + */ + void UpdateTitleL( MApiProvider& aApiProvider ); + + CBrowserContentViewContainer* Container() const{ return iContainer; }; + + void ResetPreviousViewFlag() { iWasInFeedsView = EFalse; } + /** + * Get the top left position of the application window. + * This is used to place the toolbar. + * @return The top left point of the application rect on the screen + */ + TPoint OnScreenPosition(); + + /** + * Get a pointer to the instance of the class handling the toolbar state. + * This is used when the Browser is shut down, to save the user settings + * @return A pointer to the class handling the toolbar + */ + CBrowserContentViewToolbar* BrowserContentViewToolbar() { return iBrowserContentViewToolbar; } + + /** + * Find if the platform spports touch + * @return ETrue if the platform supports touch, EFalse otherwise + */ + TBool PenEnabled() { return iPenEnabled; } + + /** + * Find if the Full Screen mode is on + * @return ETrue if the Full Screen mode is on, EFalse otherwise + */ + TBool FullScreenMode() { return iContentFullScreenMode; } + public: // from MEikStatusPaneObserver + + /** + * Handles status pane size change. + */ + void HandleStatusPaneSizeChange(); + + public: // from MBrCtlStateChangeObserver + + /** + * State change event handling for ImageMapView changes. + * @param aState which state we are in + * @param aValue state specific value + * @return void + */ + void StateChanged( TBrCtlDefs::TBrCtlState aState, TInt aValue ); + + public: // from MBrCtlCommandObserver + + /** + * Executes commands requested by the webengine + * @param aCommand which state we are in + * @param aAttributesNames name list + * @param aAttributeValues value list + * @return void + */ + void HandleCommandL(TBrCtlDefs::TBrCtlClientCommands aCommand, const CArrayFix& aAttributesNames, + const CArrayFix& aAttributeValues) ; + /* Handle Goto Pane event. + * @since 1.2 + * @param aGotoPane The Goto Pane in which the event occurred. + * @param aEvent Goto Pane event + */ + void HandleGotoPaneEventL( + CBrowserGotoPane* aGotoPane, + MGotoPaneObserver::TEvent aEvent ); + + /** + * Set Last visited bookmark. + * @since 1.2 + */ + void SetLastVisitedBookmarkL(); + + /** + * Update navi pane. + * @since 1.2 + * @param aStatusMsg Status message + */ + void UpdateNaviPaneL( TDesC& aStatusMsg ); + + /** + * Update navi pane. + * @since 1.2 + * @param aLeftScrollBar Will the left scrollbar be updated + * @param aRightScrollBar Will the right scrollbar be updated + */ + void UpdateNaviPaneL( TBool aLeftScrollBar, TBool aRightScrollBar ); + + /** + * Get the id. + * @since 1.2 + * @return UID + */ + TUid Id() const; + + /** + * Is find item in progress. + * @since 1.2 + * @return ETrue if the find item is in progress, otherwise EFalse + */ + TBool FindItemIsInProgress(); + + /** + * Handles client rect changes + */ + void HandleClientRectChange(); + + /** + * Zoom page in zoom mode + * @since 3.2.3 + */ + void ZoomModeImagesL(); + + /** + * Zoom page in + * @since 3.0 + */ + void ZoomImagesInL( TInt aDuration = KZoomModeShowDisableTime ); + + /** + * Zoom page out + * @since 3.0 + */ + void ZoomImagesOutL( TInt aDuration = KZoomModeShowDisableTime ); + + /** + * Zoom slider is to be visible or not in Content View. + * @param aVisible. ETrue if the slider is to visible, EFalse if not. + * @since 5.0 + */ + void MakeZoomSliderVisibleL( TBool aVisible ); + + /** + * Is ZoomSlider is up? + * @since 5.0 + * @return ETrue if the ZoomSlider is up, otherwise EFalse + */ + TBool ZoomSliderVisible() { return iZoomSliderVisible; } + + /** + * Is History view is up? + * @since 3.0 + * @return ETrue if the History View is up, otherwise EFalse + */ + TBool IsHistoryViewUp(); + + /** + * Is History view at the beginning i.e. first page in history + * @since 5.0 + * @return ETrue if the History is at the beginning, otherwise EFalse + */ + TBool IsHistoryAtBeginning(); + + /** + * Is History view at the end i.e. last page in history + * @since 5.0 + * @return ETrue if the History is at the end, otherwise EFalse + */ + TBool IsHistoryAtEnd(); + + /** + * Is Shortcut Keymap view is up? + * @since 5.0 + * @return ETrue if the Shortcut Keymap is up, otherwise EFalse + */ + TBool KeymapIsUp(); + + /** + * Return true if we're in zoom mode + */ + TBool isZoomMode(); + + /** + * Gets Miniature view ( old name: Thumbnail view ) status. + * @since 3.0 + * @return True if Miniature view is active, othervise False. + */ + inline TBool IsMiniatureViewUp() { return iThumbnailViewIsUp; } + + /** + * check if the plugin player is up + * @since 3.2 + * @return True if Miniature view is active, othervise False. + */ + inline TBool IsPluginPlayerUp() const { return iPluginPlayerIsUp; } + + + /** + * Find specifies keyword on page. Set aFindString to NULL if + * searching in directions. + * @since 3.0 + * @param aFindString The string to find on page. If seaching for direction + * this must be NULL. + * @param aFindDirection Search direction. True: next, otherwise: previous. + */ + void FindKeywordL( HBufC* aFindString, TBool aFindDirection = EFalse ); + + /** + * Handles opening a feed with the url + * @since 3.1 + * @param aUrl - the url of the feed + * @return void + */ + void HandleSubscribeToWithUrlL(TPtrC aUrl); + + /** + * Check status of contentview fullscreen mode + * @since 7.x + * @return True if currently in fullscreen mode, othervise False. + */ + inline TBool FullScreenMode() const { return iContentFullScreenMode; } + + public: // from MAknToolbarObserver + /** + * Should be used to set the properties of some toolbar components + * before it is drawn. + * @param aResourceId The resource ID for particular toolbar + * @param aToolbar The toolbar object pointer + */ + void DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ ); + + /** + * Handles toolbar events for a certain toolbar item. + * @param aCommand The command ID of some toolbar item. + */ + void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand);} + + public: // from MWindowObserver + void WindowEventHandlerL( TWindowEvent aEvent, TInt aWindowId ); + + // from CAknView + + /** + * Handles commands. + * @param aCommand Command to be handled + */ + void HandleCommandL( TInt aCommand ); + + // from CAknView + + /** + * From @c MEikMenuObserver. Menu emphasising or de-emphasising function. + * @c CEikMenuBar objects call this on their observer. Updates the value of + * the flags for the (@c aMenuControl) on the control stack. + * @param aMenuControl The control to be emphasised or de-emphasisied. + * @param aEmphasis @c ETrue to emphasize the menu, @c EFalse to refuse the + * focus. + */ + void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); + + TRect ResizeClientRect(); + void SetContentContainerRect(); + + private: + + /** + * Generic Zoom function + * @since 3.0 + * @param aDirection 1 for In, -1 for Out + * @param aLow low boundary for zoom level checking + * @param aHigh high boundary for zoom level checking + * @param aDuration the time to display zoom indicator + */ + void ZoomImagesL( TInt aDirection, TUint aLow, TUint aHigh, TInt aDuration ); + + TInt FindCurrentZoomIndex(TInt aCurrentZoomLevel); + + void SaveCurrentZoomLevel(TBool saveZoom); + + protected: // from CAknView + + /** + * @since 1.2 + * @param aPrevViewId Previous view id + * @param aCustomMessageId + * @param aCustomMessage + */ + void DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * @since 1.2 + */ + void DoDeactivate(); + + protected: // from CBrowserViewBase + + /** + * @since 1.2 + */ + TInt CommandSetResourceIdL(); + + /** + * Set command set lsk,rsk,msk dynamically via pointers. + * Derived classes should implement, though it can be empty. + * If it does nothing, empty softkeys will be assigned + * @since 5.0 + */ + void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {}; + + + private: + + /** + * @param aApiProvider Reference to API provider + */ + CBrowserContentView( MApiProvider& aApiProvider ); + + /** + * Symbian OS contructor. + * @param aRect + */ + void ConstructL( TRect& aRect ); + + /** + * Send address. + */ + void SendAddressL( ); + + /** + * This method is used to update the Option menu label text + * @param aMenuPane Menu pane to be configured. + * @param aCommandId Identifies the menu item (as defined in .hrh file) to be updated. + * @param aResourceId New label resource ID + */ + void UpdateOptionMenuItemLabelL( + CEikMenuPane* aMenuPane, + const TInt aCommandId, + const TInt aResourceId ); + + /** + * Do search for specified items in current page. + * @param aSearchCase items to be searched for + */ + void DoSearchL( CFindItemEngine::TFindItemSearchCase aSearchCase ); + + /** + * + */ + void SetNavipaneViewL(); + + /** + * Force updating the Goto Pane. Does nothing if Goto Pane is not + * visible. + */ + void UpdateGotoPaneL(); + + /** + * View history pane + */ + void ViewHistoryL(); + + /** + * Dynamically initialize menu panes. + * @param aResourceId ID for the resource to be loaded + * @param aMenuPane Menu pane + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + /** + * Handles a selection from the subscribe to sub-menu. + * @since 3.0 + * @param aCommand - A menu command + * @return void + */ + void HandleSubscribeToL(TInt aCommand); + + /** + * Deals with menu items for Multiple Windows Support + * @since 3.1 + * @param aWindowMenuItems - bool for each window submenu item that is set to true if it should be dimmed ; false if not + * @return true is all items were true otherwise false is returned. + */ + TBool CheckForEmptyWindowsMenuL(TWindowsMenuItemsDimCheck* aWindowMenuItems); + + /** + * Deals with dimming menu items for Multiple Windows Support + * @since 3.1 + * @param aMenuPane - A menu pane + * @param aWindowMenuItems - lists each window submenu item and whether it should be dimmed + * @return void + */ + void DimMultipleWindowsMenuItems( CEikMenuPane& aMenuPane, TWindowsMenuItemsDimCheck aWindowMenuItems); + + /** + * Check if the input is activate + * @param none + * @return ETrue if input is + */ + TBool IsEditMode(); + private: + + void ProcessCommandL( TInt aCommand ); + + void GotoUrlInGotoPaneL(); + + /** + * Adds the saved bookmark's id to the bottom of the list. + * @param aUid Uid of the bookmark + */ + void AddBMUidToLastPlaceToCurrentListL( const TInt aUid ); + + /** + * callback handler for fullscreen status pane timer + */ + static TInt CallHideFsStatusPane(TAny* aCBrowserContentView ); + + /** + * Hides the status pane for fullscreen mode and cancels timer + */ + void HideFsStatusPane(); + + /** + * Callback handler for auto fullscreen mode timer + */ + static TInt CallActivateAutoFullScreen(TAny* aCBrowserContentView); + + /** + * Activate Automatic Full screen mode + */ + void ActivateAutoFullScreenMode(); + + /** + * Start auto fullscreen timer + */ + void StartAutoFullScreenTimer(); + + /** + * Suspend auto fullscreen timer + */ + void SuspendAutoFullScreenTimer(); + + /** + * Start auto fullscreen Idle timer + */ + void StartAutoFullScreenIdleTimer(); + + /** + * Suspend auto fullscreen Idle timer + */ + void SuspendAutoFullScreenIdleTimer(); + public: + + // BrowserContentViewContainer can use this method to pop up 'Go to' pane. + void LaunchGotoAddressEditorL(); + + void UpdateFullScreenL(); + + void SetFullScreenOffL(); + + /** + * Launches the Find keyword pane. + * @since 3.0 + */ + void LaunchFindKeywordEditorL(); + + /** + * Initializes iZoomLevelArray, iCurrentZoomLevelIndex, iCurrentZoomLevel, + * iZoomInVisible, iZoomOutVisible members. + * + * Note: these members must be initialized later, after the BrowserContentView was constructed + * in BrowserAppUi, because initializing zooming, requires iBrowserControl, which is created in + * BrowserAppUi::ConstructL(), and creating iBrowserControl requires a created BrowserContentView + * object. So zoom levels must be initialized after BrowserAppUi created the iBrowserControl member. + * @since 3.0 + */ + void SetZoomLevelL(); + + /** + * Shows zoom level text in title pane for aDuration seconds. + * @since 3.0 + * @param aResourceId Resource of the zoom level string + * @param aLevel The zoom level which will be shown formatting + * with the resource string. + */ + void SetZoomLevelTitleTextL( TInt aResourceId , TInt aDuration = KZoomModeShowDisableTime ); + + + /** + * Gets the text zoom levels. + */ + void GetTextZoomLevelsL(); + + /** + * Handle zoom mode command + */ + void SetZoomModeL( TBool aZoomMode ); + + /** + * Handle pointer events when Goto pane is visible + */ + void HandlePointerCommand(TInt aCommand) { TRAP_IGNORE(HandleCommandL(aCommand)); } + + /** + * Add new bookmark to the database. + * @param aAsLastVisited ETrue if the meaning is to update "Last visited" bookmark + * @param aUrl The URL that should be bookmarked + */ + void AddNewBookmarkL( TBool aAsLastVisited, HBufC* aUrl = NULL ); + + void ShowKeymap(); + + void HideKeymap(); + + void RedrawKeymap(); + + /** + * Set whether in content view full screen mode or not. + * @since 5.0 + * @param aEnableFullScreen boolean. True: Enter fullscreen, False: Exit + * @return void + */ + void EnableFullScreenModeL( TBool aEnableFullScreen ); + + void HandlePluginFullScreen(TBool aFullScreen); + + /** + * Show or hide status pane for fullscreen mode + * @since 7.x + * @param aShow boolean. True: show status pane, False: start timer that hides status pane on timeout + * @return void + */ + void ShowFsStatusPane(TBool aShow); + + void setFullScreenFlag(){ iWasContentFullScreenMode = iContentFullScreenMode; } + + void CBrowserContentView::HandleStatusPaneCallBack(); + + private: + + CAknNavigationControlContainer* iNaviPane; + CAknNavigationDecorator* iNaviDecorator; + TBufC iStatusMsg; + CBrowserBookmarksModel* iBookmarksModel; + CBrowserContentViewContainer* iContainer; + + + // Find keyword pane's keyword + HBufC* iEnteredKeyword; + + // Zoom images... + // Array contains the zoom levels. ( 30%, 40%, ... defined in webengine) + RArray* iZoomLevelArray; + + // The index of the zoom level in iZoomLevelArray. + TUint iCurrentZoomLevelIndex; + // Zoom text... + // Array contains the text zoom levels. ( All small,Small,Normal ) + CArrayFixFlat* iTextZoomLevelArray; + // The index of the zoom level in iTextZoomLevelArray. + // This index equals to text sizes in EAllSmall... + TUint iCurrentTextZoomLevelIndex; + CArrayFixFlat* iFontSizeArray; + + TBool iHistoryViewIsUp; + TBool iThumbnailViewIsUp; + TBool iSynchRequestViewIsUp; + TBool iImageMapActive; + CAknInfoPopupNoteController* iToolBarInfoNote; + + TBool iPluginPlayerIsUp; + TBool iSmartTextViewIsUp; + + TBool iFindItemIsInProgress; + //Flag to check if the last view was Feeds engine + TBool iWasInFeedsView; + CAknStylusPopUpMenu* iStylusPopupMenu; // owned + CBrowserContentViewToolbar* iBrowserContentViewToolbar; // owned + TBool iPenEnabled; + CBrowserShortcutKeyMap* iShortcutKeyMap; // owned + + // True if the ZoomSlider is currently visible + TBool iZoomSliderVisible; + // True if in zoom mode, zoom indicator (tooltip or slider) displayed + TBool iZoomMode; + CBrowserContentViewZoomModeTimer *iZoomModeTimer; + + // True if the browser is in Full Screen Mode in ContentView + TBool iContentFullScreenMode; + TBool iHistoryAtBeginning; + TBool iHistoryAtEnd; + TBool iIsPluginFullScreenMode; + + CAknAppUiBase::TAppUiOrientation iOrientation; + TBool iWasContentFullScreenMode; + CPeriodic *iPeriodic; + TUint iCurrentZoomLevel; + TUint iSavedZoomLevel; + TBool iOptionsMenuActive; + CPeriodic *iAutoFSPeriodic; + CPeriodic *iIdlePeriodic; + TBool iFullScreenBeforeEditModeEntry; + HBufC* iTitle; + }; + +#endif + +// End of File