williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #if !defined(__CLOCK_H__) williamr@2: #define __CLOCK_H__ williamr@2: williamr@2: #if !defined(__E32STD_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__W32STD_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: // williamr@2: // miscellaneous typedefs williamr@2: // williamr@2: /** @internalComponent */ williamr@2: typedef TBuf8<1024> TConstructorBuf8; // implementation class williamr@2: williamr@2: // williamr@2: // miscellaneous enums williamr@2: // williamr@2: williamr@2: /** @internalComponent */ williamr@2: enum TDisplayType // implementation class williamr@2: { williamr@2: EDisplayDigital, williamr@2: EDisplayAnalog williamr@2: }; williamr@2: williamr@2: /** @internalComponent */ williamr@2: enum TAnalogDisplayHandFeatureType // implementation class williamr@2: { williamr@2: EAnalogDisplayHandFeatureLine, williamr@2: EAnalogDisplayHandFeaturePolyLine, williamr@2: EAnalogDisplayHandFeatureCircle williamr@2: }; williamr@2: williamr@2: /** Horizontal alignment options for text in a digital clock's display. williamr@2: williamr@2: @see TDigitalDisplayTextSection williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TDigitalDisplayHorizontalTextAlignment williamr@2: { williamr@2: /** Left align text. */ williamr@2: EDigitalDisplayHorizontalTextAlignmentLeft, williamr@2: /** Centre align text. */ williamr@2: EDigitalDisplayHorizontalTextAlignmentCenter, williamr@2: /** Right align text. */ williamr@2: EDigitalDisplayHorizontalTextAlignmentRight williamr@2: }; williamr@2: williamr@2: /** Vertical alignment options for text in a digital clock's display. williamr@2: williamr@2: @see TDigitalDisplayTextSection williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TDigitalDisplayVerticalTextAlignment williamr@2: { williamr@2: /** Top align text. */ williamr@2: EDigitalDisplayVerticalTextAlignmentTop, williamr@2: /** Centre align text, including the character descent. */ williamr@2: EDigitalDisplayVerticalTextAlignmentCenterInclDescent, williamr@2: /** Centre align text, excluding the character descent. */ williamr@2: EDigitalDisplayVerticalTextAlignmentCenterExclDescent, williamr@2: /** Bottom align text, including the character descent. */ williamr@2: EDigitalDisplayVerticalTextAlignmentBottomInclDescent, williamr@2: /** Bottom align text, excluding the character descent. */ williamr@2: EDigitalDisplayVerticalTextAlignmentBottomExclDescent williamr@2: }; williamr@2: williamr@2: /** Special characters that can be used in a digital clock display. williamr@2: williamr@2: @see TDigitalDisplayTextSection williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TDigitalDisplayLayoutChar williamr@2: { williamr@2: /** A flashing block to delimit different sections of the display. williamr@2: */ williamr@2: /** A flashing block to delimit different sections of the display. */ williamr@2: EDigitalDisplayLayoutCharFlashingBlockDelimiter=1 williamr@2: }; williamr@2: williamr@2: // williamr@2: /** Different types of hand for an analogue clock. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TAnalogDisplayHandType williamr@2: { williamr@2: /** A hand that performs one revolution every 12 hours. */ williamr@2: EAnalogDisplayHandOneRevPer12Hours, williamr@2: /** A hand that performs one revolution every hour. */ williamr@2: EAnalogDisplayHandOneRevPerHour, williamr@2: /** A hand that performs one revolution every minute. */ williamr@2: EAnalogDisplayHandOneRevPerMinute williamr@2: }; williamr@2: williamr@2: // williamr@2: // miscellaneous structs williamr@2: // williamr@2: williamr@2: struct STimeDeviceShadow williamr@2: /** Determines how shadows are added to the clock display. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: /** True if shadows should be displayed, else false. */ williamr@2: TBool iIsOn; williamr@2: /** Colour of the shadows. */ williamr@2: TRgb iColor; williamr@2: /** Offset of shadows from foreground. */ williamr@2: TPoint iOffset; williamr@2: }; williamr@2: williamr@2: struct SAnalogDisplayAmPm williamr@2: /** Defines the display parameters of the AM/PM display for an analogue clock. williamr@2: williamr@2: @see RAnalogClock williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: /** Position relative to the clock face. */ williamr@2: TPoint iPositionRelativeToFace; williamr@2: /** Size. */ williamr@2: TSize iSize; williamr@2: /** Shadow settings. */ williamr@2: STimeDeviceShadow iShadow; williamr@2: /** Background colour. */ williamr@2: TRgb iBackgroundColor; williamr@2: /** Handle to the font to use. This can be obtained using CFbsFont::Handle(). williamr@2: williamr@2: @see CFbsFont::Handle() */ williamr@2: TInt iFontHandle; williamr@2: /** Colour for text. */ williamr@2: TRgb iTextColor; williamr@2: }; williamr@2: williamr@2: // williamr@2: // display-addition classes williamr@2: // williamr@2: williamr@2: williamr@2: class TDisplayAddition williamr@2: /** This class is used in the derivation of TAnalogDisplayHand and TDigitalDisplayTextSection. williamr@2: williamr@2: @internalComponent */ williamr@2: { williamr@2: public: williamr@2: const TDesC8& Buf() const; williamr@2: protected: williamr@2: TConstructorBuf8 iBuf; williamr@2: }; williamr@2: williamr@2: // williamr@2: williamr@2: class TDigitalDisplayTextSection : public TDisplayAddition williamr@2: /** A text section for a digital clock. williamr@2: williamr@2: @see RDigitalClock williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TDigitalDisplayTextSection(TInt aFontHandle, TRgb aTextColor, TDigitalDisplayHorizontalTextAlignment aHorizontalAlignment, williamr@2: TDigitalDisplayVerticalTextAlignment aVerticalAlignment, williamr@2: TInt aHorizontalMargin, TInt aVerticalMargin, const TDesC& aFormat); williamr@2: // N.B. the font passed in to aFontHandle cannot be destroyed until the williamr@2: // RDigitalClock has been completely constructed, including all necessary williamr@2: // calls to RDigitalClock::AddTextSectionL() williamr@2: }; williamr@2: williamr@2: // williamr@2: williamr@2: class TAnalogDisplayHand : public TDisplayAddition williamr@2: /** A hand for an analogue clock. williamr@2: williamr@2: A hand is a vector drawing made from a number of features (lines, circles, williamr@2: polylines). These are specified with the hand assumed to be in the 12 o'clock williamr@2: position, with TPoint(0,0) being the center of the clock. williamr@2: williamr@2: @see RAnalogClock williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TAnalogDisplayHand(TAnalogDisplayHandType aType); williamr@2: IMPORT_C void AddLine(CGraphicsContext::TPenStyle aPenStyle, TRgb aPenColor, const TSize& aPenSize, williamr@2: const TPoint& aStartPoint, const TPoint& aEndPoint); williamr@2: IMPORT_C void AddPolyLine(CGraphicsContext::TPenStyle aPenStyle, TRgb aPenColor, const TSize& aPenSize, williamr@2: CGraphicsContext::TBrushStyle aBrushStyle, TRgb aBrushColor, williamr@2: TBool aClosed, const CArrayFix* aPointList); // aPointList is not destroyed williamr@2: IMPORT_C void AddCircle(CGraphicsContext::TPenStyle aPenStyle, TRgb aPenColor, const TSize& aPenSize, williamr@2: CGraphicsContext::TBrushStyle aBrushStyle, TRgb aBrushColor, williamr@2: const TPoint& aCircleCenter, TInt aRadius); williamr@2: inline TInt NumFeatures() const williamr@2: /** Gets the number of features added to the hand. */ williamr@2: {return *iNumFeaturesPtr;} williamr@2: private: williamr@2: void AppendType(TAnalogDisplayHandFeatureType aType); williamr@2: private: williamr@2: TInt* iNumFeaturesPtr; williamr@2: }; williamr@2: williamr@2: // williamr@2: // utility class williamr@2: // williamr@2: williamr@2: class RAnimWithUtils : public RAnim williamr@2: /** Utility class to support clock animation. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: RAnimWithUtils(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: void AppendToConstructorBufL(const TDesC8& aData); williamr@2: void SendConstructorBufIfCompleteL(TInt aAnimatedObjectType); williamr@2: void SendConstructorBufL(TInt aAnimatedObjectType); williamr@2: TBool ConstructorBufExists() const; williamr@2: TBool ConstructorBufAlreadySent() const; williamr@2: TConstructorBuf8& ConstructorBuf() const; williamr@2: void SetNumAdditionsStillExpected(TInt aNumAdditionsStillExpected); williamr@2: public: williamr@2: IMPORT_C virtual void Close(); williamr@2: private: williamr@2: TConstructorBuf8* iConstructorBuf; // on the heap as it is only required for construction williamr@2: TBool iConstructorBufAlreadySent; williamr@2: const RWindowBase& iWindow; williamr@2: TInt iNumAdditionsStillExpected; williamr@2: }; williamr@2: williamr@2: // williamr@2: // time-device abstract classes williamr@2: // williamr@2: williamr@2: williamr@2: class RTimeDevice : public RAnimWithUtils williamr@2: /** Sets display parameters for clocks. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: RTimeDevice(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: void AppendDisplayTypeL(TDisplayType aType); williamr@2: void AppendDigitalDisplayConstructorArgsL(const TPoint& aPosition, const TSize& aSize, const TMargins& aMargins, const STimeDeviceShadow& aShadow, williamr@2: TRgb aBackgroundColor, TInt aNumTextSections); williamr@2: void AppendAnalogDisplayConstructorArgsL(const TPoint& aPosition, const TSize& aSize, const TMargins& aMargins, const STimeDeviceShadow& aShadow, williamr@2: TInt aFaceHandle, TInt aFaceMaskHandle, TInt aNumHands, const SAnalogDisplayAmPm* aAmPm); williamr@2: public: williamr@2: IMPORT_C void SetVisible(TBool aVisible); // can only be called after full construction - by default clocks are invisible williamr@2: IMPORT_C void SetPositionAndSize(const TPoint& aPosition, const TSize& aSize); // can only be called after full construction williamr@2: IMPORT_C void SetPosition(const TPoint& aPosition); // can only be called after full construction williamr@2: IMPORT_C void SetSize(const TSize& aSize); // can only be called after full construction williamr@2: IMPORT_C void UpdateDisplay(); // can only be called after full construction williamr@2: IMPORT_C void Draw(); // can only be called after full construction williamr@2: }; williamr@2: williamr@2: // williamr@2: williamr@2: class RClock : public RTimeDevice williamr@2: /** Sets the time for clocks. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: protected: williamr@2: RClock(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: void AppendClockConstructorArgsL(TTimeIntervalSeconds aUniversalTimeOffset); williamr@2: public: williamr@2: IMPORT_C void SetUniversalTimeOffset(TTimeIntervalSeconds aUniversalTimeOffset); // can only be called after full construction williamr@2: }; williamr@2: williamr@2: // williamr@2: // time-device concrete classes williamr@2: // williamr@2: williamr@2: class RDigitalClock : public RClock williamr@2: /** A digital clock. williamr@2: williamr@2: A digital clock is composed of one or more text sections, which define williamr@2: how the time information is displayed. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C RDigitalClock(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: IMPORT_C void ConstructL(TTimeIntervalSeconds aUniversalTimeOffset, const TPoint& aPosition, const TSize& aSize, const TMargins& aMargins, williamr@2: const STimeDeviceShadow& aShadow, TRgb aBackgroundColor, TInt aNumTextSections); williamr@2: IMPORT_C void AddTextSectionL(const TDigitalDisplayTextSection& aTextSection); williamr@2: IMPORT_C void SetBackgroundColor(TRgb aBackgroundColor, TRgb aShadowColor); // can only be called after full construction williamr@2: IMPORT_C void SetTextColor(TRgb aTextColor); williamr@2: williamr@2: }; williamr@2: williamr@2: // williamr@2: williamr@2: williamr@2: class RAnalogClock : public RClock williamr@2: /** An analogue clock. williamr@2: williamr@2: @see CFbsBitmap::Handle() williamr@2: @publishedAll williamr@2: @released */ williamr@2: williamr@2: { williamr@2: public: williamr@2: IMPORT_C RAnalogClock(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: IMPORT_C void ConstructL(TTimeIntervalSeconds aUniversalTimeOffset, const TPoint& aPosition, const TSize& aSize, const TMargins& aMargins, williamr@2: const STimeDeviceShadow& aShadow, TInt aFaceHandle, TInt aFaceMaskHandle, TInt aNumHands, const SAnalogDisplayAmPm* aAmPm=NULL); williamr@2: // N.B. the bitmap(s) passed in to aFaceHandle and aFaceMaskHandle in these williamr@2: // ConstructL functions cannot be destroyed until the RAnalogClock has been williamr@2: // completely constructed, including all necessary calls to williamr@2: // RAnalogClock::AddHandL() - aFaceMaskHandle may be 0 williamr@2: IMPORT_C void AddHandL(const TAnalogDisplayHand& aHand); williamr@2: IMPORT_C void SetBackgroundColor(TRgb aBackgroundColor, TRgb aShadowColor); // can only be called after full construction williamr@2: IMPORT_C void SetTextColor(TRgb aTextColor); williamr@2: IMPORT_C void SetPenColor(const TRgb aPenColor); williamr@2: IMPORT_C void SetBrushColor(const TRgb aBrushColor); williamr@2: }; williamr@2: williamr@2: // williamr@2: // message-window class williamr@2: // williamr@2: williamr@2: williamr@2: class RMessageWindow : public RAnimWithUtils williamr@2: /** A configurable window that appears for a brief time to display a message to williamr@2: the user and then disappears. williamr@2: williamr@2: This is the basic class that is used by classes such as CEikonEnv and CEikMsgWin williamr@2: to provide information and message windows. Such higher-level classes would williamr@2: normally be used by client applications rather than RMessageWindow. This class williamr@2: can be used though to implement specialist new classes. williamr@2: williamr@2: Note that this class is in the same library as the Clock API for implementation williamr@2: reasons only. williamr@2: williamr@2: @see CEikMsgWin williamr@2: @see CEikonEnv williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: /** Defines the maximum length of text in the message. */ williamr@2: enum williamr@2: { williamr@2: /** Maximum length of text in the message. */ williamr@2: EMaxTextLength=80 williamr@2: }; williamr@2: public: williamr@2: IMPORT_C RMessageWindow(RAnimDll& aAnimDll, const RWindowBase& aWindow); williamr@2: IMPORT_C void ConstructL(TInt aBaselineOffset, TInt aFontHandle, TRgb aBackgroundColor, TRgb aTextColor); williamr@2: IMPORT_C void ConstructL(TInt aBaselineOffset, TInt aFontHandle, TRgb aBackgroundColor, TRgb aTextColor, TRgb aBorderColor); williamr@2: IMPORT_C void StartDisplay(TBool aFlash, TTimeIntervalMicroSeconds32 aInitialDelay, const TDesC& aText); williamr@2: IMPORT_C void StartDisplay(TBool aFlash, TTimeIntervalMicroSeconds32 aInitialDelay, TTimeIntervalMicroSeconds32 aDuration, const TDesC& aText); williamr@2: IMPORT_C void CancelDisplay(); williamr@2: IMPORT_C void GetBorders(TMargins& aBorders); williamr@2: IMPORT_C void SetBackgroundColor(TRgb aBackgroundColor); williamr@2: IMPORT_C void SetTextColor(TRgb aTextColor); williamr@2: IMPORT_C void SetBorderColor(TRgb aBorderColor); williamr@2: IMPORT_C void SetPlinthColors(TRgb aTl,TRgb aBr); williamr@2: }; williamr@2: williamr@2: #endif