williamr@2: /* williamr@2: * Copyright (c) 2002 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: * Implementation of the query control for multiline queries williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: #ifndef __AKN_MULTILINE_QUERY_CONTROL_H williamr@2: #define __AKN_MULTILINE_QUERY_CONTROL_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: williamr@2: enum TLinePosition williamr@2: { williamr@2: EFirstLine = 0, williamr@2: ESecondLine williamr@2: }; williamr@2: williamr@2: class TAknWindowLineLayout; williamr@2: williamr@2: /** williamr@2: * Multiline query control class. williamr@2: */ williamr@2: class CAknMultilineQueryControl : public CAknQueryControl williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: /** williamr@2: * C++ Constructor. williamr@2: */ williamr@2: IMPORT_C CAknMultilineQueryControl(); williamr@2: williamr@2: /** williamr@2: * C++ Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CAknMultilineQueryControl(); williamr@2: williamr@2: public://new API functions williamr@2: /** williamr@2: * Set number of prompt lines to controls. williamr@2: * This have to call before setting sizs of the components williamr@2: * williamr@2: * @param aNbrOfPromptLinesFirstLine Numbers of lines in first prompt text williamr@2: * @param aNbrOfPromptLinesSecondLine Numbers of lines in Second prompt text williamr@2: */ williamr@2: IMPORT_C void SetNbrOfPromptLines(TInt aNbrOfPromptLinesFirstLine, TInt aNbrOfPromptLinesSecondLine); williamr@2: williamr@2: /** williamr@2: * Return true if control is the first query in the dialog williamr@2: */ williamr@2: IMPORT_C TBool IsFirst() const; williamr@2: williamr@2: /** williamr@2: * Return true if control is the second query in the dialog williamr@2: */ williamr@2: IMPORT_C TBool IsSecond() const; williamr@2: williamr@2: public: //Functions from CAknQueryControl williamr@2: williamr@2: /** williamr@2: * Get pointer to query controls control (editor) williamr@2: * williamr@2: * @param aLayout Controls layout (for multiline queries use williamr@2: * EMultiDataFirstEdwin, EMultiDataSecondEdwin...) williamr@2: * @return Pointer to control, NULL if not found williamr@2: */ williamr@2: IMPORT_C virtual CCoeControl* ControlByLayoutOrNull(TInt aLayout); williamr@2: williamr@2: public: // Functions from CCoeControl williamr@2: williamr@2: /** williamr@2: * From CCoeControl Give the control a mimimum size. williamr@2: * williamr@2: * @return The minimum size required by the control. williamr@2: */ williamr@2: IMPORT_C TSize MinimumSize(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl. williamr@2: * Handles pointer events williamr@2: * @param aPointerEvent The pointer event. williamr@2: */ williamr@2: IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: williamr@2: williamr@2: IMPORT_C void HandleResourceChange(TInt aType); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * LAF indexing williamr@2: * williamr@2: * Manage indexes into LAF tables williamr@2: */ williamr@2: class TIndex williamr@2: { williamr@2: public: williamr@2: TIndex(const TLinePosition& aLinePos, TInt aFirstQueryPromptLines,TInt aSecondQueryPromptLines); williamr@2: williamr@2: public: williamr@2: TInt MainPanePQDCWindow() const; williamr@2: TInt CDCQPWindowLine1() const; williamr@2: TInt CDCQPWindowLine2() const; williamr@2: TInt CDCQPWindowLine3() const; williamr@2: TInt CDCQPWindowRectangles() const; williamr@2: TInt CDCQPWindowLine5() const; williamr@2: williamr@2: TInt CDCQPWindowTextsLine1(TInt aLineNum) const; williamr@2: TInt CDCQPWindowTextsLine2() const; williamr@2: TInt CDCQPWindowTextsLine3(TInt aLineNum) const; williamr@2: TInt CDCQPWindowTextsLine4() const; williamr@2: williamr@2: TInt CDCPQWindowGraphicsLine5() const; williamr@2: williamr@2: public: williamr@2: const TInt LinePos() const { return iLinePos; } williamr@2: williamr@2: private: williamr@2: TInt FirstQueryPromptLines() const; williamr@2: TInt SecondQueryPromptLines() const; williamr@2: williamr@2: void SelfTest() const; williamr@2: williamr@2: private: williamr@2: TLinePosition iLinePos; williamr@2: TInt iFirstQueryPromptLines; williamr@2: TInt iSecondQueryPromptLines; williamr@2: }; williamr@2: williamr@2: protected: // From CAknQueryControl williamr@2: /** williamr@2: * Set line widths for query prompt williamr@2: */ williamr@2: void SetLineWidthsL(); williamr@2: williamr@2: /** williamr@2: * Read the query data from resource file williamr@2: */ williamr@2: void ConstructQueryL(TResourceReader& aRes); williamr@2: williamr@2: /** williamr@2: * Layout rectangle (shift up and left by margins) williamr@2: */ williamr@2: TRect LayoutRect(); williamr@2: williamr@2: private://From CCoeControl williamr@2: void SizeChanged(); williamr@2: void Draw(const TRect& aRect) const; williamr@2: private: williamr@2: /** williamr@2: * From CAknControl williamr@2: */ williamr@2: IMPORT_C void* ExtensionInterface( TUid aInterface ); williamr@2: williamr@2: private: //Layout methods williamr@2: void LayoutPrompt(const TLayoutMethod& aLayoutM); williamr@2: void LayoutSeparator(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: void LayoutEditor(const TLayoutMethod& aLayoutM); williamr@2: void LayoutEditorFrame(const TLayoutMethod& aLayoutM); williamr@2: void LayoutEditorIndicator(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Return window layout depending on Layout williamr@2: * Window layout is done by the dialog williamr@2: */ williamr@2: void WindowLayout( TAknWindowLineLayout& aLayout ) const; williamr@2: williamr@2: private: //Implementation methods williamr@2: void SetLinePosition(); williamr@2: TInt16 FirstLineHeight() const; williamr@2: TInt16 SecondLineHeight() const; williamr@2: williamr@2: private: williamr@2: TAknLayoutRect iLayoutLineBetweenEntryFields; /// Layout rect for line between two entry fields williamr@2: TLinePosition iLinePos; williamr@2: TInt iFirstQueryPromptLines; williamr@2: TInt iSecondQueryPromptLines; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: * Derived Multiline query control class. williamr@2: * williamr@2: * @since 2.1 williamr@2: */ williamr@2: class CAknExtMultilineQueryControl : public CAknExtQueryControl williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: /** williamr@2: * C++ Constructor. williamr@2: */ williamr@2: IMPORT_C CAknExtMultilineQueryControl(); williamr@2: williamr@2: /** williamr@2: * C++ Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CAknExtMultilineQueryControl(); williamr@2: williamr@2: public://new API functions williamr@2: /** williamr@2: * Set number of prompt lines to controls. williamr@2: * This have to call before setting sizs of the components williamr@2: * williamr@2: * @param aNbrOfPromptLinesFirstLine Numbers of lines in first prompt text williamr@2: * @param aNbrOfPromptLinesSecondLine Numbers of lines in Second prompt text williamr@2: */ williamr@2: IMPORT_C void SetNbrOfPromptLines(TInt aNbrOfPromptLinesFirstLine, TInt aNbrOfPromptLinesSecondLine); williamr@2: williamr@2: /** williamr@2: * Return true if control is the first query in the dialog williamr@2: */ williamr@2: IMPORT_C TBool IsFirst() const; williamr@2: williamr@2: /** williamr@2: * Return true if control is the second query in the dialog williamr@2: */ williamr@2: IMPORT_C TBool IsSecond() const; williamr@2: williamr@2: public: //Functions from CAknQueryControl williamr@2: williamr@2: /** williamr@2: * Get pointer to query controls control (editor) williamr@2: * williamr@2: * @param aLayout Controls layout (for multiline queries use williamr@2: * EMultiDataFirstIpEd, EMultiDataSecondIpEd...) williamr@2: * @return Pointer to control, NULL if not found williamr@2: */ williamr@2: IMPORT_C virtual CCoeControl* ControlByLayoutOrNull(TInt aLayout); williamr@2: williamr@2: public: // Functions from CCoeControl williamr@2: williamr@2: /** williamr@2: * From CCoeControl Give the control a mimimum size. williamr@2: * williamr@2: * @return The minimum size required by the control. williamr@2: */ williamr@2: IMPORT_C TSize MinimumSize(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl. williamr@2: * Handles pointer events williamr@2: * @param aPointerEvent The pointer event. williamr@2: */ williamr@2: IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: williamr@2: IMPORT_C void HandleResourceChange(TInt aType); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * LAF indexing williamr@2: * williamr@2: * Manage indexes into LAF tables williamr@2: */ williamr@2: class TIndex williamr@2: { williamr@2: public: williamr@2: TIndex(const TLinePosition& aLinePos, TInt aFirstQueryPromptLines,TInt aSecondQueryPromptLines); williamr@2: williamr@2: public: williamr@2: TInt MainPanePQDCWindow() const; williamr@2: TInt CDCQPWindowLine1() const; williamr@2: TInt CDCQPWindowLine2() const; williamr@2: TInt CDCQPWindowLine3() const; williamr@2: TInt CDCQPWindowRectangles() const; williamr@2: TInt CDCQPWindowLine5() const; williamr@2: williamr@2: TInt CDCQPWindowTextsLine1(TInt aLineNum) const; williamr@2: TInt CDCQPWindowTextsLine2() const; williamr@2: TInt CDCQPWindowTextsLine3(TInt aLineNum) const; williamr@2: TInt CDCQPWindowTextsLine4() const; williamr@2: williamr@2: TInt CDCPQWindowGraphicsLine5() const; williamr@2: williamr@2: public: williamr@2: const TInt LinePos() const { return iLinePos; } williamr@2: williamr@2: private: williamr@2: TInt FirstQueryPromptLines() const; williamr@2: TInt SecondQueryPromptLines() const; williamr@2: williamr@2: void SelfTest() const; williamr@2: williamr@2: private: williamr@2: TLinePosition iLinePos; williamr@2: TInt iFirstQueryPromptLines; williamr@2: TInt iSecondQueryPromptLines; williamr@2: }; williamr@2: williamr@2: protected: // From CAknQueryControl williamr@2: /** williamr@2: * Set line widths for query prompt williamr@2: */ williamr@2: void SetLineWidthsL(); williamr@2: williamr@2: /** williamr@2: * Read the query data from resource file williamr@2: */ williamr@2: void ConstructQueryL(TResourceReader& aRes); williamr@2: williamr@2: /** williamr@2: * Layout rectangle (shift up and left by margins) williamr@2: */ williamr@2: TRect LayoutRect(); williamr@2: williamr@2: private://From CCoeControl williamr@2: void SizeChanged(); williamr@2: void Draw(const TRect& aRect) const; williamr@2: private: williamr@2: /** williamr@2: * From CAknControl williamr@2: */ williamr@2: IMPORT_C void* ExtensionInterface( TUid aInterface ); williamr@2: williamr@2: private: //Layout methods williamr@2: void LayoutPrompt(const TLayoutMethod& aLayoutM); williamr@2: void LayoutSeparator(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: void LayoutEditor(const TLayoutMethod& aLayoutM); williamr@2: void LayoutEditorFrame(const TLayoutMethod& aLayoutM); williamr@2: void LayoutEditorIndicator(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Return window layout depending on Layout williamr@2: * Window layout is done by the dialog williamr@2: */ williamr@2: void WindowLayout( TAknWindowLineLayout& aLayout ) const; williamr@2: williamr@2: private: //Implementation methods williamr@2: void SetLinePosition(); williamr@2: TInt16 FirstLineHeight() const; williamr@2: TInt16 SecondLineHeight() const; williamr@2: private: williamr@2: TAknLayoutRect iLayoutLineBetweenEntryFields; /// Layout rect for line between two entry fields williamr@2: TLinePosition iLinePos; williamr@2: TInt iFirstQueryPromptLines; williamr@2: TInt iSecondQueryPromptLines; williamr@2: TAny* iSpare_1; williamr@2: williamr@2: williamr@2: }; williamr@2: williamr@2: #endif