--- a/textinput/peninputcommonctrls/src/peninputrangebar/peninputrangebar.cpp Wed Jun 23 04:57:58 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1349 +0,0 @@
-/*
-* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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: Implementation of range bar
-*
-*/
-
-
-// system includes
-//#include <peninputpluginutils.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-#include <AknsUtils.h>
-#include <AknLayoutDef.h>
-#include <AknUtils.h>
-#include <barsread.h>
-
-// user includes
-#include <peninputrangebar.h>
-#include <peninputbutton.h>
-#include <peninputmultimodebutton.h>
-#include <peninputcommonctrls.hrh>
-#include <peninputpluginutils.h>
-#include <peninputcommonbutton.h>
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::CAknFepCtrlRangeBar
-// C++ constructor
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CAknFepCtrlRangeBar::CAknFepCtrlRangeBar(CFepUiLayout* aUiLayout, TInt aControlId,
- TButtonGroupStyle aStyle)
-: CControlGroup(aUiLayout, aControlId, EFalse), iFirstTimeConstruct(ETrue)
- {
- iStyle = aStyle;
- //iActionStyle = ERangeBarActionStyleHide;
- iActionStyle = ERangeBarUsingIndicatorStyle;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::~CAknFepCtrlRangeBar
-// C++ destructor
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CAknFepCtrlRangeBar::~CAknFepCtrlRangeBar()
- {
- iIndicators.ResetAndDestroy();
- iIndicators.Close();
- iCellRects.Close();
- iCellInnerRects.Close();
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::NewL
-// Two-phased constructor.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CAknFepCtrlRangeBar* CAknFepCtrlRangeBar::NewL(CFepUiLayout* aUiLayout, TInt aControlId,
- TButtonGroupStyle aStyle)
- {
- CAknFepCtrlRangeBar* self = new (ELeave) CAknFepCtrlRangeBar (aUiLayout, aControlId, aStyle);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::NewLC
-// Two-phased constructor.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CAknFepCtrlRangeBar* CAknFepCtrlRangeBar::NewLC(CFepUiLayout* aUiLayout,
- TInt aControlId,
- TButtonGroupStyle aStyle)
- {
- CAknFepCtrlRangeBar* self = new (ELeave) CAknFepCtrlRangeBar (aUiLayout, aControlId, aStyle);
- CleanupStack::PushL(self);
- self->ConstructL();
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ConstructL
-// Construct the instance
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ConstructL()
- {
- // Construct the base control first
- CControlGroup::ConstructL();
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::HandlePointerDownEventL
-// Implement the pointer down handler
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CFepUiBaseCtrl* CAknFepCtrlRangeBar::HandlePointerDownEventL(const TPoint& aPoint)
- {
- CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerDownEventL( aPoint );
- return ctrl;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SizeChanged
-// Implement the SizeChanged handler
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SizeChanged(const TRect aRect)
- {
- SetCellRect(aRect);
-
- if( iCellChanged )
- {
- SetRect(aRect);
-
- iActionStyle == ERangeBarUsingIndicatorStyle ?
- UpdateIndicatorRectForUsingIndicatorStyle(EFalse) :
- UpdateIndicatorRect(EFalse);
- }
- else
- {
- iIsReloadImages = ETrue;
- SetWholeRect();
- //Draw();
- SetIndicatorRect();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ConstructFromResourceL
-// Construct the range bar from the resource
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ConstructFromResourceL(TResourceReader& aReader)
- {
- //destroy all previous range buttons
-
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- CAknFepCtrlCommonButton* button = iIndicators[ ii ]->iIndicator;
- if (button)
- {
- RemoveControl(button);
- }
- }
-
- iIndicators.ResetAndDestroy();
-
- const TInt countRanges = aReader.ReadInt16();
-
- if (countRanges <= 0)
- {
- User::Leave(KErrArgument);
- }
-
- // Create range indicator buttons
- for (TInt ii = 0; ii < countRanges; ++ii)
- {
- AddRangeL(aReader);
- }
-
- const TInt defaultRangeIndex = aReader.ReadInt16();
-
- if (defaultRangeIndex >= 0 && defaultRangeIndex < iIndicators.Count())
- {
- SetRange(iIndicators[defaultRangeIndex]->iInputRange);
- }
-
- iFirstTimeConstruct = EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetIndicatorRect()
-// Re-calculate the position and layout
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CAknFepCtrlRangeBar::SetIndicatorRect()
- {
- TRect rect(iIndicatorRect);
- TInt count = iIndicators.Count();
- TInt lastPos = -1;
-
- for (TInt ii = 0; ii < count; ++ii)
- {
- if ( ii != 0 &&
- (iActionStyle != ERangeBarUsingIndicatorStyle ||
- lastPos != iIndicators[ii]->iPosIdx ) )
- {
- if (iStyle == EBtnGroupVertical)
- {
- rect.Move(0, iIndicatorRect.Height());
- }
- else
- {
- rect.Move(iIndicatorRect.Width(), 0);
- }
- }
- lastPos = iIndicators[ii]->iPosIdx;
-
- TRect innerRect;
- AknPenImageUtils::CalculateGraphicRect( rect, innerRect );
-
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ii]->iIndicator)->
- SizeChanged(rect, innerRect, iIsReloadImages);
- }
- else
- {
- static_cast<CAknFepCtrlCommonButton*>(iIndicators[ii]->iIndicator)->
- SizeChanged(rect, innerRect, iIsReloadImages);
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::Draw()
-// Re-calculate the position and layout
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::Draw()
- {
- if(!AbleToDraw())
- return;
-
- CControlGroup::Draw();
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::RefreshUI
-// Refresh the component
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::RefreshUI()
- {
- // this function not called anymore
- SetIndicatorRect();
-
- // Flush the gc memory to the LCD device
- UpdateArea(iEraseRect, EFalse);
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::HandleControlEvent
-// responding on button up event
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl,
- const TDesC& /*aEventData*/)
- {
- if (aEventType == EEventButtonUp)
- {
- // get aCtrl's index
- TBool ctrlExist = EFalse;
- TInt ctrlIndex = 0;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if ((iIndicators[ii]->iIndicator == aCtrl)
- && (!(iIndicators[ii]->iIndicator->IsDimmed())))
- {
- ctrlExist = ETrue;
- ctrlIndex = ii;
- break;
- }
- }
-
- if (!ctrlExist)
- {
- return;
- }
-
- TBool needSendEvent = EFalse;
-
- // aCtrl's index is ctrlIndex
- if ( (ActiveControl() != aCtrl)
- || (iIndicators[ctrlIndex]->iCtrlType == EButtonTypePopupMode) )
- {
- needSendEvent = ETrue;
- }
- else // press active button again
- {
- // only meaningful when it is multimode button
- if (iIndicators[ctrlIndex]->iCtrlType == EButtonTypeMultiMode)
- {
- CAknFepCtrlMultiModeButton* button = static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ctrlIndex]->iIndicator);
-
- // change range: user press mixed range multimode button, and range is changed
- if (iIndicators[ctrlIndex]->iRangeType == ERangeTypeMixed)
- {
- if ((button->NextMode() != KErrNotFound) &&
- (button->RangeOfGivenMode(button->CurrentMode()) !=
- button->RangeOfGivenMode(button->NextMode())))
- {
- // change range
- ReportEventToObserver(iEventIdForRange,
- button->RangeOfGivenMode(button->NextMode()));
- }
- else if (button->RangeOfGivenMode(button->CurrentMode()) ==
- button->RangeOfGivenMode(button->NextMode()))
- {
- // mixed range multimode button: change case
- ReportEventToObserver(iEventIdForCase, button->NextMode());
- }
- }
- else
- {
- // single range multimode button: change case
- ReportEventToObserver(iEventIdForCase, button->NextMode());
- }
- }
- else
- {
- if ( iIndicators[ctrlIndex]->iInputRange != iInputRange )
- {
- needSendEvent = ETrue;
- }
- }
- }
-
- if ( needSendEvent )
- {
- // press another button instead of active button, it will send range event
- if ((iIndicators[ctrlIndex]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ctrlIndex]->iRangeType == ERangeTypeMixed))
- {
- CAknFepCtrlMultiModeButton* button =
- static_cast<CAknFepCtrlMultiModeButton*>(aCtrl);
-
- if ((button) &&
- (button->IsGivenRangeSupported(
- button->RangeOfGivenMode(button->CurrentMode()))))
- {
- ReportEventToObserver(iEventIdForRange,
- button->RangeOfGivenMode(button->CurrentMode()));
- }
- }
- else
- {
- // for single range multimode button and normal button
- ReportEventToObserver(iEventIdForRange, iIndicators[ctrlIndex]->iInputRange);
- }
- }
-
- // make sure the normal button press effect for :
- // using indicator style, and EIndicatorActionStyleNormal
- if (iActionStyle == ERangeBarUsingIndicatorStyle &&
- iIndicators[ctrlIndex]->iActionStyle == EIndicatorActionStyleNormal &&
- iIndicators[ctrlIndex]->iIndicator->IsActive())
- {
- iIndicators[ctrlIndex]->iIndicator->SetHighlight(EFalse);
- }
-
- if ( iActionStyle == ERangeBarUsingIndicatorStyle &&
- iIndicators[ctrlIndex]->iActionStyle != EIndicatorActionStyleHighLight )
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if(iIndicators[ ii ]->iActionStyle == EIndicatorActionStyleHighLight
- && ii != ctrlIndex)
- {
- iIndicators[ ii ]->iIndicator->SetHighlight(
- iIndicators[ ii ]->iIndicator->IsActive() );
- }
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetRange
-// set current input range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CAknFepCtrlRangeBar::SetRange(const TInt aRange)
- {
- // if set range in a mixed range multimode button,
- // should use detailed range, but not mixed range
- TBool ret = EFalse;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- CAknFepCtrlCommonButton* button = iIndicators[ ii ]->iIndicator;
-
- if ((button) && (!(button->IsDimmed())))
- {
- if ((iIndicators[ii]->iInputRange == aRange) ||
- ((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ii]->iRangeType == ERangeTypeMixed) &&
- (static_cast<CAknFepCtrlMultiModeButton*>(button)->IsGivenRangeSupported(aRange))))
- {
- // 1st condition: normal button or single range multimode button
- // 2nd condition: mixed range multimode button
- if (!(iIndicators[ii]->iInputRange == aRange))
- {
- // mixed range multimode button
- static_cast<CAknFepCtrlMultiModeButton*>(button)->SetRange(aRange);
- }
-
- iInputRange = aRange;
-
- SetActiveCtrl(button);
-
- ret = ETrue;
- }
- else
- {
- button->SetActive(EFalse);
- }
- }
- }
-
- if ( iActionStyle == ERangeBarActionStyleHighLight )
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- iIndicators[ ii ]->iIndicator->SetHighlight( iIndicators[ ii ]->iIndicator->IsActive() );
- }
- }
- else
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if(iIndicators[ ii ]->iActionStyle == EIndicatorActionStyleHighLight)
- {
- iIndicators[ ii ]->iIndicator->SetHighlight( iIndicators[ ii ]->iIndicator->IsActive() );
- }
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetCaseL
-// set mode of given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetCaseL(const TInt aRange, const TInt aModeIndex)
- {
- // aRange is detailed range, it only meaningful for multimodebutton
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- CAknFepCtrlMultiModeButton* button = static_cast<CAknFepCtrlMultiModeButton*>
- (iIndicators[ii]->iIndicator);
- if ((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- ((iIndicators[ii]->iInputRange == aRange) ||
- ((iIndicators[ii]->iRangeType == ERangeTypeMixed) &&
- (button->IsGivenRangeSupported(aRange)))))
- {
- if (iIndicators[ii]->iRangeType == ERangeTypeMixed)
- {
- button->SetRange(aRange);
- }
-
- if (button->IsActive())
- {
- button->SetCurrentModeL(EBtnBmpActive, aModeIndex);
- }
- else
- {
- button->SetCurrentModeL(EBtnBmpNonActive, aModeIndex);
- }
-
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetPermittedRanges
-// set permitted ranges
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetPermittedRanges(const TInt aPermitted)
- {
- // aPermitted only include detailed range, not mixed
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- TBool needDimButton = EFalse;
- CAknFepCtrlCommonButton* button= iIndicators[ii]->iIndicator;
-
- if ((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ii]->iRangeType == ERangeTypeMixed))
- {
- // mixed multi button
- RArray<TInt> rangeList;
- TRAP_IGNORE(static_cast<CAknFepCtrlMultiModeButton*>
- (button)->GetRangeListL(rangeList));
-
- needDimButton = ETrue;
- TInt disableIdx = -1;
-
- for (TInt ii = 0; ii < rangeList.Count(); ii++)
- {
- if (aPermitted & rangeList[ii])
- {
- static_cast<CAknFepCtrlMultiModeButton*>(button)->SetPermittedRange(
- rangeList[ii], ETrue);
- needDimButton = EFalse;
- }
- else
- {
- static_cast<CAknFepCtrlMultiModeButton*>(button)->SetPermittedRange(
- rangeList[ii], EFalse);
- disableIdx = ii;
- }
- }
-
- // disable mode can only after permitted modes are all setted.
- if ( disableIdx >= 0 )
- {
- static_cast<CAknFepCtrlMultiModeButton*>(button)->DisableOneModes(
- rangeList[disableIdx]);
- }
-
- rangeList.Reset();
- rangeList.Close();
- }
- else if (!(aPermitted & iIndicators[ii]->iInputRange))
- {
- // disable a normal or single range multi button
- needDimButton = ETrue;
-
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- TRAP_IGNORE(static_cast<CAknFepCtrlMultiModeButton*>(button)->SetCurrentModeL(
- EBtnBmpNonActive , 0));
- }
- }
-
- if (needDimButton)
- {
- button->SetDimmed(ETrue);
- button->SetActive(EFalse);
- }
- else
- {
- button->SetDimmed(EFalse);
- }
- }
-
- if ( iActionStyle == ERangeBarUsingIndicatorStyle )
- {
- for(TInt n = 0; n < iIndicators.Count(); n++)
- {
- for( TInt m = n+1; m < iIndicators.Count(); m++ )
- {
- if( iIndicators[n]->iPosIdx == iIndicators[m]->iPosIdx )
- {
- TBool nDimmed = iIndicators[n]->iIndicator->IsDimmed();
- TBool mDimmed = iIndicators[m]->iIndicator->IsDimmed();
-
- if ( nDimmed != mDimmed )
- {
- iIndicators[n]->iIndicator->Hide(nDimmed);
- iIndicators[m]->iIndicator->Hide(mDimmed);
- }
- }
- }
- }
- }
- //RefreshUI();
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetPermittedRange
-// set permitted ranges
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetPermittedRange(const TInt aRangeId, TBool aPermit)
- {
- // this function has take consideration of mixed range multimodebutton
- // aRangeId is detailed range here
- TBool needDimButton = EFalse;
- TBool findButton = EFalse;
- TInt buttonIdx = 0;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- CAknFepCtrlCommonButton* button = iIndicators[ii]->iIndicator;
-
- if ((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ii]->iRangeType == ERangeTypeMixed))
- {
- // mixed multi button
- if (static_cast<CAknFepCtrlMultiModeButton*>(button)->IsGivenRangeSupported(aRangeId))
- {
- findButton = ETrue;
- buttonIdx = ii;
-
- static_cast<CAknFepCtrlMultiModeButton*>(button)->SetPermittedRange(aRangeId,
- aPermit);
-
- RArray<TInt> rangeList;
-
- TRAP_IGNORE(static_cast<CAknFepCtrlMultiModeButton*>(button)->GetRangeListL(
- rangeList));
-
- if ( (!aPermit) && (rangeList.Count() == 1) )
- {
- needDimButton = ETrue;
- }
-
- rangeList.Reset();
- rangeList.Close();
-
- break;
- }
- }
- else
- {
- // normal or single range multi button
- if (iIndicators[ii]->iInputRange == aRangeId)
- {
- findButton = ETrue;
- buttonIdx = ii;
-
- if (!aPermit)
- {
- needDimButton = ETrue;
-
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- TRAP_IGNORE(
- static_cast<CAknFepCtrlMultiModeButton*>(button)->SetCurrentModeL(
- EBtnBmpNonActive , 0));
- }
- }
- break;
- }
- }
- }
-
- if (findButton)
- {
- CAknFepCtrlCommonButton* button = iIndicators[buttonIdx]->iIndicator;
-
- if (!needDimButton)
- {
- button->SetDimmed(EFalse);
- }
- else
- {
- button->SetDimmed(ETrue);
- button->SetActive(EFalse);
- }
- }
-
- //RefreshUI();
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetPermittedCase
-// set permitted ranges
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetPermittedCase(const TInt aRangeId,
- const TInt aRealCaseId,
- TBool aPermit)
- {
- // aRangeId is detailed range here
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if (((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ii]->iInputRange == aRangeId)) ||
- ((iIndicators[ii]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[ii]->iRangeType == ERangeTypeMixed) &&
- (static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ii]->iIndicator)->IsGivenRangeSupported(aRangeId))))
- {
- // single range multimode button OR mixed range multimode button
- static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ii]->iIndicator)->SetPermittedModes(aRangeId, aRealCaseId, aPermit);
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::HideRange
-// hide given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::HideRange(const TInt aRange)
- {
- // mixed range multimode button is not considerred here
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if ( ( iIndicators[ ii ] ) &&
- ( iIndicators[ ii ]->iInputRange == aRange ) &&
- ( !iIndicators[ ii ]->iIsHide))
- {
- iIndicators[ii]->iIndicator->Hide(ETrue);
-
- iIndicators[ ii ]->iIsHide = ETrue;
-
- if( iCellChanged )
- {
- UpdateIndicatorRect(EFalse);
- }
- else
- {
- SetWholeRect();
- iIsReloadImages = EFalse;
- //Draw();
- SetIndicatorRect();
- }
-
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::HideRangeUsingIndicatorStyle
-// hide given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::HideRangeUsingIndicatorStyle(const TInt aRange)
- {
- // mixed range multimode button is not considerred here
- TInt indiIdx = IndicatorIdxByRange(aRange);
-
- if (indiIdx == KErrNotFound)
- return;
-
- HideRangeForHidingIndicatorStyle(indiIdx, ETrue);
-
- UpdateIndicatorRectForUsingIndicatorStyle(EFalse);
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ShowRange
-// show given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ShowRange(const TInt aRange)
- {
- // mixed range multimode button is not considerred here
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if ( ( iIndicators[ ii ] ) &&
- ( iIndicators[ ii ]->iInputRange == aRange ) &&
- ( iIndicators[ ii ]->iIsHide))
- {
- iIndicators[ii]->iIndicator->Hide(EFalse);
- iIndicators[ ii ]->iIsHide = EFalse;
-
- if( iCellChanged )
- {
- UpdateIndicatorRect(ETrue);
- }
- else
- {
- SetWholeRect();
- iIsReloadImages = EFalse;
-
- //Draw();
- SetIndicatorRect();
- }
-
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ShowRangeUsingIndicatorStyle
-// show given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ShowRangeUsingIndicatorStyle(const TInt aRange)
- {
- // mixed range multimode button is not considerred here
- TInt indiIdx = IndicatorIdxByRange(aRange);
-
- if (indiIdx == KErrNotFound)
- return;
-
- HideRangeForHidingIndicatorStyle(indiIdx, EFalse);
-
- UpdateIndicatorRectForUsingIndicatorStyle(EFalse);
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::AddRangeL
-// add range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::AddRangeL(TResourceReader& aReader)
- {
- const TInt16 rangeId = aReader.ReadInt16();
- const TInt16 rangeType = aReader.ReadInt16();
- const TInt16 ctrlId = aReader.ReadInt16();
- const TInt16 ctrlType = aReader.ReadInt16();
- const TInt32 resId = aReader.ReadInt32();
- const TInt actionStyle = aReader.ReadInt16();
- TBool hide = aReader.ReadInt16();
- TInt posidx = aReader.ReadInt16();
-
- CAknFepCtrlCommonButton* button = NULL;
-
- if (ctrlType != EButtonTypeMultiMode)
- {
- // normal button
- button = CAknFepCtrlCommonButton::NewLC(UiLayout(), ctrlId,
- KAknsIIDQsnFrFunctionButtonNormal,
- KAknsIIDQsnFrFunctionButtonPressed,
- KAknsIIDQsnFrFunctionButtonInactive );
- button->SetResourceId(resId);
- button->ConstructFromResourceL();
- }
- else
- {
- // Multiple display type button
- button = CAknFepCtrlMultiModeButton::NewLC(UiLayout(), ctrlId,
- KAknsIIDQsnFrFunctionButtonNormal,
- KAknsIIDQsnFrFunctionButtonPressed,
- KAknsIIDQsnFrFunctionButtonInactive);
-
- button->SetResourceId(resId);
- button->ConstructFromResourceL();
- }
-
- button->AddEventObserver( this );
-
- AddControlL( button );
- CleanupStack::Pop(button); // button
-
- TAknFepRangeIndicator* indicator = new (ELeave) TAknFepRangeIndicator;
- CleanupStack::PushL( indicator );
-
- indicator->iCtrlType = ctrlType;
- indicator->iInputRange = rangeId;
- indicator->iRangeType = rangeType;
- indicator->iCtrlId = ctrlId;
- //indicator->iIsHide = EFalse;
- indicator->iIsHide = hide;
- if (hide)
- button->Hide(ETrue);
- indicator->iIndicator = button;
- indicator->iActionStyle = actionStyle;
- indicator->iPosIdx = posidx;
-
- User::LeaveIfError( iIndicators.Append(indicator) );
- CleanupStack::Pop(indicator); // indicator
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::GetCase
-// get mode of given range
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CAknFepCtrlRangeBar::GetCase(TInt aRange) const
- {
- // get current real case of aRange
- // aRange is detailed range here, for mixed range multimode button, it contained in one range of it
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- CAknFepCtrlMultiModeButton* button = static_cast<CAknFepCtrlMultiModeButton*>
- (iIndicators[ii]->iIndicator);
-
- if ( ( (iIndicators[ii]->iRangeType == ERangeTypeMixed) &&
- (button->IsGivenRangeSupported(aRange)) &&
- ((button->RangeOfGivenMode(button->CurrentMode()) == aRange)) )
- || (iIndicators[ii]->iInputRange == aRange))
- {
- return button->GetRealCaseByMode(button->CurrentMode());
- }
- }
- }
-
- return KErrNotFound;
- }
-
-// -----------------------------------------------------------------------------
-// Implementation of CAknFepCtrlRangeBar::SetFont
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetFont(const CFont* aFont)
- {
- iFont = aFont;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ii]->iIndicator)->SetFont(iFont);
-
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// Implementation of CAknFepCtrlRangeBar::Move
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::Move(const TPoint& aOffset)
- {
- CControlGroup::Move(aOffset);
-
- iIndicatorRect.Move(aOffset);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetEventIdForRange
-// set event id when range is clicked
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetEventIdForRange(TInt aEventId)
- {
- iEventIdForRange = aEventId;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetEventIdForCase
-// set event id when case is clicked
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetEventIdForCase(TInt aEventId)
- {
- iEventIdForCase = aEventId;
- }
-
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ShowAllRanges
-// Display all ranges whether it is IsHide
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ShowAllRanges()
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- iIndicators[ii]->iIsHide = EFalse;
- iIndicators[ii]->iIndicator->Hide(EFalse);
- }
-
- if( iCellChanged )
- {
- iActionStyle == ERangeBarUsingIndicatorStyle ?
- UpdateIndicatorRectForUsingIndicatorStyle(EFalse) :
- UpdateIndicatorRect(EFalse);
- }
- else
- {
- SetWholeRect();
- iIsReloadImages = EFalse;
- //Draw();
- SetIndicatorRect();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetWholeRect
-// Set rect of whole range bar
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CAknFepCtrlRangeBar::SetWholeRect()
- {
- if (iStyle == EBtnGroupVertical)
- {
- SetRect(TRect(iIndicatorRect.iTl,
- TPoint(iIndicatorRect.iTl.iX + iIndicatorRect.Width(),
- iIndicatorRect.iTl.iY +
- iIndicatorRect.Height() * (NumOfControls() - NumOfHidedRange()))));
- }
- else
- {
- SetRect(TRect(iIndicatorRect.iTl,
- TPoint(iIndicatorRect.iTl.iX +
- iIndicatorRect.Width() * (NumOfControls() - NumOfHidedRange()),
- iIndicatorRect.iTl.iY + iIndicatorRect.Height())));
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::NumOfHidedRange
-// Get number of hided input ranges
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepCtrlRangeBar::NumOfHidedRange()
- {
- TInt numOfHidedRange = 0;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if (iIndicators[ ii ]->iIsHide)
- {
- numOfHidedRange++;
- }
- }
-
- return numOfHidedRange;
- }
-
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::SetActionStyle
-// set action style
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::SetActionStyle(TRangeBarActionStyle aActionStyle)
- {
- iActionStyle = aActionStyle;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::IndicatorIdxByRange
-// get indicator index by range
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepCtrlRangeBar::IndicatorIdxByRange(TInt aRange)
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if ( IsMixedRange(ii) )
- {
- CAknFepCtrlMultiModeButton* button = static_cast<CAknFepCtrlMultiModeButton*>
- (iIndicators[ii]->iIndicator);
- if ( button->RangeOfGivenMode(button->NextMode()) == aRange ||
- button->RangeOfGivenMode(button->CurrentMode()) == aRange )
- {
- return ii;
- }
- }
- else if (iIndicators[ii]->iInputRange == aRange)
- {
- return ii;
- }
- }
-
- return KErrNotFound;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ActiveRange
-// active range
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAknFepCtrlRangeBar::ActiveRange(TInt aRange)
- {
- TInt indiIdx = IndicatorIdxByRange(aRange);
-
- if (indiIdx == KErrNotFound)
- return;
-
- if (iActionStyle == ERangeBarActionStyleHide ||
- (iActionStyle == ERangeBarUsingIndicatorStyle &&
- iIndicators[indiIdx]->iActionStyle == EIndicatorActionStyleHide))
- {
- TBool needChange = EFalse;
-
- if (!iIndicators[indiIdx]->iIndicator->IsDimmed() && iIndicators[indiIdx]->iIndicator)
- {
- needChange = ETrue;
- iInputRange = iIndicators[indiIdx]->iInputRange;
- SetActiveCtrl(iIndicators[indiIdx]->iIndicator);
- }
-
- if (needChange)
- {
- if (iActionStyle == ERangeBarActionStyleHide)
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- if (ii == indiIdx)
- {
- iIndicators[ii]->iIndicator->Hide(ETrue);
- iIndicators[ii]->iIsHide = ETrue;
- }
- else if (iIndicators[ii]->iIsHide)
- {
- iIndicators[ii]->iIsHide = EFalse;
- iIndicators[ii]->iIndicator->Hide(EFalse);
- }
- }
- if (iCellChanged )
- {
- UpdateIndicatorRect( EFalse );
- }
- else
- {
- SetWholeRect();
- iIsReloadImages = EFalse;
- //Draw();
- SetIndicatorRect();
- }
- }
- else
- {
- HideRangeForHidingIndicatorStyle(indiIdx, ETrue);
- UpdateIndicatorRectForUsingIndicatorStyle(EFalse);
- }
- }
- }
- else
- {
- // whole range bar's action style is highlight, or it depends on each indicator's
- // action style, which is highlight or just visible
- SetRange(aRange);
- }
-
- for (TInt ii = 0; ii < iIndicators.Count(); ++ii)
- {
- TBool highlight =
- iIndicators[ii]->iIndicator->IsActive() && !iIndicators[ii]->iIndicator->Hiden();
- iIndicators[ii]->iIndicator->SetHighlight(highlight);
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::IsMixedRange
-// Judge if button in given index has mixed range
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CAknFepCtrlRangeBar::IsMixedRange(const TInt aIndex)
- {
- if ((aIndex >= 0) &&
- (aIndex <= iIndicators.Count()-1) &&
- (iIndicators[aIndex]->iCtrlType == EButtonTypeMultiMode) &&
- (iIndicators[aIndex]->iRangeType == ERangeTypeMixed))
- {
- return ETrue;
- }
-
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepCtrlRangeBar::ReportEventToObserver
-// Report range or case event to observer
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CAknFepCtrlRangeBar::ReportEventToObserver(const TInt aEventId, const TInt aEventData)
- {
- TPtrC ptr;
- TInt sendData = aEventData;
- ptr.Set(reinterpret_cast<TText*>(&sendData),sizeof(aEventData));
-
- ReportEvent(aEventId, ptr);
- }
-
-EXPORT_C void CAknFepCtrlRangeBar::SetDispalyCellRectsL( const RArray<TRect>& aRects,
- const RArray<TRect>& aInnerRects )
- {
- iCellChanged = ETrue;
- iCellRects.Close();
- iCellInnerRects.Close();
- for( TInt i = 0; i < aRects.Count(); i++ )
- {
- iCellRects.AppendL( aRects[i] );
- }
-
- for( TInt i = 0; i < aInnerRects.Count(); i++ )
- {
- iCellInnerRects.AppendL( aInnerRects[i] );
- }
-
- iActionStyle == ERangeBarUsingIndicatorStyle ?
- UpdateIndicatorRectForUsingIndicatorStyle(ETrue) :
- UpdateIndicatorRect(ETrue);
- }
-
-void CAknFepCtrlRangeBar::UpdateIndicatorRect( TBool aUpdateImage)
- {
- TInt index = 0;
- for (TInt ii = 0; ii < iIndicators.Count() && iCellRects.Count() > 0; ++ii)
- {
- TPoint offset( iIndicatorRect.iTl.iX, iIndicatorRect.iTl.iY );
- if (!iIndicators[ii]->iIsHide )
- {
- CAknFepCtrlCommonButton* button = iIndicators[ii]->iIndicator;
- if( button )
- {
- TInt n = index++;
- TRect btnRect( iCellRects[n] );
- TRect btnInnerRect( iCellInnerRects[n] );
- //btnRect.Move( offset );
- if (iIndicators[ii]->iCtrlType == EButtonTypeMultiMode)
- {
- static_cast<CAknFepCtrlMultiModeButton*>(iIndicators[ii]->iIndicator)->
- SizeChanged(btnRect, btnInnerRect, aUpdateImage);
- }
- else
- {
- static_cast<CAknFepCtrlCommonButton*>(iIndicators[ii]->iIndicator)->
- SizeChanged(btnRect, btnInnerRect, aUpdateImage);
- }
- }
- if( index == iCellRects.Count() )
- break;
- }
- }
- }
-
-void CAknFepCtrlRangeBar::UpdateIndicatorRectForUsingIndicatorStyle(TBool aUpdateImage)
- {
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if (/*!iIndicators[ii]->iIsHide && */
- iIndicators[ii]->iIndicator &&
- iIndicators[ii]->iPosIdx >= 0 &&
- iIndicators[ii]->iPosIdx < iCellRects.Count())
- {
- iIndicators[ii]->iIndicator->SizeChanged(iCellRects[iIndicators[ii]->iPosIdx],
- iCellInnerRects[iIndicators[ii]->iPosIdx],
- aUpdateImage);
- }
- }
- }
-
-void CAknFepCtrlRangeBar::HideRangeForHidingIndicatorStyle(TInt aIdx,
- TBool aHide)
- {
- RArray<TInt> permitRangeInxArray;
- TInt maxPos = 0;
-
- // Get all the permitted range index array
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- maxPos = iIndicators[ii]->iPosIdx > maxPos ? iIndicators[ii]->iPosIdx : maxPos;
-
- if( !(iIndicators[ii]->iIndicator->IsDimmed() ) && iIndicators[ii]->iPosIdx >=0 )
- {
- permitRangeInxArray.Append(ii);
- }
- }
-
- TBool showAllPermittedRange = ETrue;
-
- // compare the position for every permitted range
- if( permitRangeInxArray.Count() == maxPos + 1 )
- {
- for(TInt n = 0; n < permitRangeInxArray.Count(); n++)
- {
- for( TInt m = n+1; m < permitRangeInxArray.Count(); m++ )
- {
- if( iIndicators[permitRangeInxArray[n]]->iPosIdx ==
- iIndicators[permitRangeInxArray[m]]->iPosIdx )
- {
- showAllPermittedRange = EFalse;
- break;
- }
- }
- }
- }
- else
- {
- showAllPermittedRange = EFalse;
- }
-
- permitRangeInxArray.Reset();
- permitRangeInxArray.Close();
-
- if( !showAllPermittedRange ) // hide style
- {
- if (iIndicators[aIdx]->iIsHide != aHide &&
- iIndicators[aIdx]->iIndicator)
- {
- TBool canShowNext = ETrue;
-
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if (ii != aIdx && iIndicators[ii]->iPosIdx == iIndicators[aIdx]->iPosIdx)
- {
- if ( iIndicators[ii]->iIndicator->IsDimmed() )
- {
- canShowNext = EFalse;
- }
- else
- {
- iIndicators[ii]->iIndicator->Hide(!aHide);
- iIndicators[ii]->iIsHide = !aHide;
- }
-
- if (aHide)
- break;
- }
- }
-
- iIndicators[aIdx]->iIndicator->Hide( canShowNext && aHide);
- iIndicators[aIdx]->iIsHide = canShowNext && aHide;
- }
- }
- else
- {
- // Set the range for special state
- for (TInt ii = 0; ii < iIndicators.Count(); ii++)
- {
- if( iIndicators[ii]->iIndicator->IsDimmed() )
- {
- iIndicators[ii]->iIndicator->Hide(ETrue);
- iIndicators[ii]->iIsHide = ETrue;
- }
- else
- {
- iIndicators[ii]->iIndicator->Hide(EFalse);
- iIndicators[ii]->iIsHide = EFalse;
- }
- }
-
- }
- }
-// End Of File