diff -r 12af337248b1 -r bd7edf625bdd calendarui/controller/src/calenmultidbeditor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/controller/src/calenmultidbeditor.cpp Wed Sep 01 12:32:31 2010 +0100 @@ -0,0 +1,1284 @@ +/* +* 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 "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: Include common routine for each note editor. + * For example, handling menu, key event, error handling etc. + * +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "calenmultidbeditor.h" +#include "calendarui_debug.h" +#include "calendar.hrh" +#include "calentitlepane.h" +#include "calencontroller.h" +#include "calenmultipledbui.h" + +// Constants. +const TUint16 KIllegalChars[] = { + '<', '>', '"', '/', '//', '|', ':', '*', '?', + 0xFF02, // Full width quote + 0xFF0A, // Full width asterisk + 0xFF0F, // Full width slash + 0xFF1A, // Full width colon + 0xFF1C, // Full width left arrow + 0xFF1E, // Full width right arrow + 0xFF1F, // Full width question mark + 0xFF3C, // Full width back slash + 0xFF5C, // Full width pipe + 0x201C, // Left quote + 0x201D, // Right quote + 0x201F, // Reversed quote + 0x21B2, // Downwards arrow with tip leftwards + 0, // Array terminator +}; +const TInt KCalenMaxELAFTextEditorLength(256); +const TInt KOne( 1 ); +const TInt KBuffLength ( 16 ); +const TInt KTen( 10 ); + +// Literals. +_LIT( KFormatStringTwoDigit, "%02d" ); +_LIT( KFormatString, "%d" ); + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------------------------- +// CCalenMultiDBEditor::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CCalenMultiDBEditor* CCalenMultiDBEditor::NewL( + CCalenMultipleDbUi& aMultipleDbui, CCalCalendarInfo& aCalendarInfo, + CCalenController& aController, TBool aEditFlag) + { + TRACE_ENTRY_POINT; + + CCalenMultiDBEditor* self = new (ELeave) CCalenMultiDBEditor( + aMultipleDbui, aCalendarInfo, aController, aEditFlag); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + TRACE_EXIT_POINT; + return self; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::~CCalenMultiDBEditor +// Destructor. +// ----------------------------------------------------------------------------- +// +CCalenMultiDBEditor::~CCalenMultiDBEditor() + { + TRACE_ENTRY_POINT; + + if(iRgbColors) + { + iRgbColors->Reset(); + delete iRgbColors; + iRgbColors = NULL; + } + + if(iCalendarName) + { + delete iCalendarName; + iCalendarName = NULL; + } + + if( iNaviContainer ) + { + iNaviContainer->Pop(); // Remove navi pane used by settings view + iNaviContainer = NULL; // iNaviContainer is not owned + } + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::CCalenMultiDBEditor +// C++ constructor can NOT contain any code, that might leave. +// This overload is used when the repeat type is known. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenMultiDBEditor::CCalenMultiDBEditor(CCalenMultipleDbUi& aMultipleDbui, + CCalCalendarInfo& aCalendarInfo, CCalenController& aController, + TBool aEditFlag) : + iCalendarInfo(aCalendarInfo), iController( + aController), iEditFlag(aEditFlag), + iMultipleDbUi(aMultipleDbui) + { + TRACE_ENTRY_POINT; + + iCalendarStatus = ECalenMultiDbVisible; + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::ConstructL +// Leaving construction common to all editors. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::ConstructL() + { + TRACE_ENTRY_POINT; + + iConflict = CCalenMultiDBEditor::EConflictNone; + + CAknDialog::ConstructL( R_CALEN_MULTIDB_MENUBAR ); // superclass + SetTitlePaneL(); + iCalendarName = HBufC::NewL(KCalenMaxELAFTextEditorLength); + + //Initial color value + iColVal = iCalendarInfo.Color().Value(); + iChoosenColor = TRgb(iColVal); + + iPicture = new( ELeave )CDbColorPicture( TSize( 0, 0 ) ); + iPicture->SetRgbColorsL(iChoosenColor); + + + + LoadColorsL(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::LoadColorsL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::LoadColorsL() + { + TRACE_ENTRY_POINT + + if(iRgbColors) + { + iRgbColors->Reset(); + delete iRgbColors; + iRgbColors = NULL; + } + + iRgbColors = new(ELeave) CArrayFixFlat(2); + + iRgbColors->AppendL(KCalenDarkBlue); + iRgbColors->AppendL(KCalenDarkGreen); + iRgbColors->AppendL(KCalenDarkRed); + iRgbColors->AppendL(KCalenMegenta); + iRgbColors->AppendL(KCalenBlue); + iRgbColors->AppendL(KCalenGreen); + iRgbColors->AppendL(KCalenOrange); + iRgbColors->AppendL(KCalenlightMagenta); + iRgbColors->AppendL(KCalenCyan); + iRgbColors->AppendL(KCalenlightGreen); + iRgbColors->AppendL(KCalenYellow); + iRgbColors->AppendL(KCalenlightPink); + iRgbColors->AppendL(KCalenlightBlue); + iRgbColors->AppendL(KCalenGold); + iRgbColors->AppendL(KCalenDarkOrange); + iRgbColors->AppendL(KCalenPink); + + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::ProcessCommandL +// Process commands from the user. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::ProcessCommandL( TInt aCommandId ) + { + TRACE_ENTRY_POINT; + + HideMenu(); + + switch(aCommandId) + { + case ECalenMultiDbHelp: + { + HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), + (iEikonEnv->AppUi())->AppHelpContextL ()); + } + break; + case EAknCmdExit: + case EAknSoftkeyExit: + { + TryExitL( EAknSoftkeyExit ); + } + break; + + case EAknSoftkeyChange: + { + if( ECalenMultiDbHiddenVisible == IdOfFocusControl() ) + { + iCalendarStatus = iCalendarInfo.Enabled(); + + if( ECalenMultiDbHidden == iCalendarStatus ) + { + SetVisiblityFieldL( ECalenMultiDbVisible ); + iCalendarStatus = ECalenMultiDbVisible; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + else + { + SetVisiblityFieldL( ECalenMultiDbHidden ); + iCalendarStatus = ECalenMultiDbHidden; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + } + else if ( ECalenMultiDbColor == IdOfFocusControl() ) + { + GetColorL(); + } + } + break; + + case EAknSoftkeyOpen: + { + GetColorL(); + } + break; + + default: + { + // No implementation yet. + } + break; + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::HandleEditCommandL +// Process commands from the user. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + void CCalenMultiDBEditor::HandleEditCommandL() + { + switch(IdOfFocusControl()) + { + case ECalenMultiDbColor: + { + GetColorL(); + } + break; + default: + { + // No implementation yet. + } + break; + } + } + + + // ----------------------------------------------------------------------------- + // CCalenMultiDBEditor::SetConflict + // (other items were commented in a header). + // ----------------------------------------------------------------------------- + // +void CCalenMultiDBEditor::SetConflict(TCalendarConflicts aConflict) + { + TRACE_ENTRY_POINT + iConflict = aConflict; + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::Conflict +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenMultiDBEditor::TCalendarConflicts CCalenMultiDBEditor::Conflict() const + { + TRACE_ENTRY_POINT + TRACE_EXIT_POINT + return iConflict; + } + + // ----------------------------------------------------------------------------- + // CCalenMultiDBEditor::HandleNotification + // (other items were commented in a header). + // ----------------------------------------------------------------------------- + // + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::OkToExitL +// Handle CBA-key on a form. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::OkToExitL(TInt aButtonId) + { + TRACE_ENTRY_POINT; + TBool isExitForm(EFalse); + + switch(aButtonId) + { + case EAknSoftkeyOpen: + { + GetColorL(); + } + break; + + case EAknSoftkeyOptions: + { + DisplayMenuL(); + isExitForm = EFalse; + } + break; + + case EAknSoftkeyChange: + { + isExitForm=EFalse; + if( ECalenMultiDbHiddenVisible == IdOfFocusControl() ) + { + iCalendarStatus = iCalendarInfo.Enabled(); + + if( ECalenMultiDbHidden == iCalendarStatus ) + { + SetVisiblityFieldL( ECalenMultiDbVisible ); + iCalendarStatus = ECalenMultiDbVisible; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + else + { + SetVisiblityFieldL( ECalenMultiDbHidden ); + iCalendarStatus = ECalenMultiDbHidden; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + } + else if ( ECalenMultiDbColor == IdOfFocusControl() ) + { + GetColorL(); + } + } + break; + + case EAknSoftkeyDone: + { + isExitForm = SaveNoteL(aButtonId); + if (isExitForm) + { + TInt err = iMultipleDbUi.UpdateOnAddOrEditL(!iEditFlag); + if (err != KErrNone) + { + ShowErrorNoteL(err); + } + } + } + break; + case EAknSoftkeyExit: + case EAknCmdExit: + { + isExitForm = SaveNoteL(aButtonId); + if (isExitForm) + { + TInt err = iMultipleDbUi.UpdateOnAddOrEditL(!iEditFlag); + if (err != KErrNone) + { + ShowErrorNoteL(err); + } + } + isExitForm = ETrue; + iMultipleDbUi.ExitDialogL(); + } + break; + case EAknSoftkeyQuit: + { + isExitForm = ETrue; + } + break; + default: + { + isExitForm=CAknForm::OkToExitL(aButtonId); + } + break; + } + TRACE_EXIT_POINT; + + return isExitForm; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::OfferKeyEventL +// Passes key events to MsgEditorView to enable scrolling. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TKeyResponse CCalenMultiDBEditor::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) + { + TRACE_ENTRY_POINT; + TKeyResponse keyResponse(EKeyWasNotConsumed); + + if (aType == EEventKey) + { + switch (aKeyEvent.iCode) + { + case EKeyEscape: + TryExitL( EAknCmdExit ); + keyResponse = EKeyWasConsumed; + break; + default: + keyResponse = CAknForm::OfferKeyEventL(aKeyEvent,aType); + break; + } + } + else + { + // Swallow all other keyevents to prevent the active container processing them. + keyResponse = EKeyWasConsumed; + } + TRACE_EXIT_POINT; + return keyResponse; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::PreLayoutDynInitL() +// Updates fields just before the form is shown. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::PreLayoutDynInitL() + { + TRACE_ENTRY_POINT; + + + + // Set data to controls in the editor. + SetDataToFormL(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::SetDataToFormL() +// Reads data from the entry and updates the form with the appropriate values. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::SetDataToFormL() + { + TRACE_ENTRY_POINT; + //First filed "Name" of the Form + CEikEdwin* edwin = + reinterpret_cast(Control(ECalenMultiDbName)); + + if( edwin ) + { + edwin->SetTextLimit(KCalenMaxELAFTextEditorLength); + edwin->SetSelectionL( edwin->TextLength(), 0 ); + } + + SetEditableL(ETrue); + Line(ECalenMultiDbName)->SetFocus(ETrue); + Line(ECalenMultiDbName)->ActivateL(); + + HBufC* calendarName = iCalendarInfo.NameL().AllocLC(); + + // Check for the empty text. + if( ( !calendarName->Size() ) ) + { + CleanupStack::PopAndDestroy(calendarName); + TInt index( KOne ); + calendarName = StringLoader::LoadLC( R_CALE_DB_CALENDAR ); + TBuf< KBuffLength > numBuf; + + // Check if name is already there or not. + while( IsNameFoundL( *calendarName ) ) + { + CleanupStack::PopAndDestroy( calendarName ); + numBuf.Zero(); + if( index < KTen ) + { + numBuf.Format( KFormatStringTwoDigit, index ); + } + else + { + numBuf.Format( KFormatString, index ); + } + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + numBuf ); + calendarName = StringLoader::LoadLC( + R_CALE_DB_CALENDAR_DEFAULT_NAME, numBuf ); + + ++index; + } + } + SetEdwinTextL( ECalenMultiDbName, calendarName ); + CleanupStack::PopAndDestroy(calendarName); + + //Second field "Color" of the form + // Instantiate CDbColorPicture object 300x300 twips in size + CEikRichTextEditor* colorControl = static_cast(Control(ECalenMultiDbColor)); + + //Prepare the iPicture header, which will be inserted into the rich text + TPictureHeader header; + header.iPicture = TSwizzle(iPicture); + + // Position where we insert iPicture is not valid as it always draws icon depending the rect we provide + colorControl->RichText()->InsertL(0, header); + colorControl->AddFlagToUserFlags(CEikEdwin::EAvkonDisableCursor | CEikEdwin::EReadOnly ); + GetLineByLineAndPageIndex(1,0)->DrawNow(); + + iCalendarStatus = iCalendarInfo.Enabled(); + + + + if( ECalenMultiDbHidden == iCalendarStatus ) + { + SetVisiblityFieldL( ECalenMultiDbHidden ); + } + else + { + SetVisiblityFieldL( ECalenMultiDbVisible ); + } + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenMultiDBEditor::DynInitMenuPaneL +// Gets called before form is displayed +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenMultiDBEditor::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + TRACE_ENTRY_POINT; + + if( aResourceId != R_CALEN_MULTIDB_MENUPANE ) + { + return; + } + + // Execute the following commands if the resource belongs to calendar. + // Display the menu items based on the current focused control. + if( ECalenMultiDbName == IdOfFocusControl() ) + { + aMenuPane->SetItemDimmed( EAknSoftkeyChange, ETrue ); + } + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::GetColorL +// From class CAknSettingItem. +// GetColorL overridden to launch colour selection grid. +// --------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::GetColorL() + { + TRACE_ENTRY_POINT; + iNoneChoosen = ETrue; + + // Construct colour selection grid + CAknDialog *dlg = CAknColourSelectionGrid::NewL(iRgbColors, EFalse, + iNoneChoosen,iChoosenColor ); + + dlg->ExecuteLD(R_CALEN_MULTIDB_EDITOR_COLOR_GRID_DLG); + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::FocusChanged +// --------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::FocusChanged(TDrawNow /*aDrawNow*/) + { + TRACE_ENTRY_POINT + + if(IsFocused() && !iNoneChoosen) + { + iColVal = iChoosenColor.Value(); + TRAP_IGNORE(iPicture->SetRgbColorsL(iChoosenColor)); + GetLineByLineAndPageIndex(1, 0)->DrawNow(); + } + + TRACE_EXIT_POINT + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::SaveNoteL +// Try to save note. Initializes all the member variables of DBInfo. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::SaveNoteL( TInt aButtonId ) + { + TRACE_ENTRY_POINT; + + if (CheckSpaceBelowCriticalLevelL()) + { + TRACE_EXIT_POINT; + return EFalse; + } + + if (Conflict() == CCalenMultiDBEditor::EConflictDelete) + { + CAknNoteDialog *note = new (ELeave) CAknNoteDialog( + CAknNoteDialog::EWarningTone, CAknNoteDialog::ENoTimeout); + HBufC* buf = StringLoader::LoadLC( + R_QTN_CALENDAREDITOR_NOTE_DB_CONFLICT_DELETE, iEikonEnv); + note->SetTextL(*buf); + note->ExecuteLD(R_CALEN_CALENDAREDITOR_CONFLICT_DIALOG); + CleanupStack::PopAndDestroy(buf); + return ETrue; + } + else if (Conflict() == CCalenMultiDBEditor::EConflictUpdate) + { + CAknNoteDialog *note = new (ELeave) CAknNoteDialog( + CAknNoteDialog::EWarningTone, CAknNoteDialog::ENoTimeout); + HBufC* buf = StringLoader::LoadLC( + R_QTN_CALENDAREDITOR_NOTE_DB_CONFLICT_UPDATE, iEikonEnv); + note->SetTextL(*buf); + note->ExecuteLD(R_CALEN_CALENDAREDITOR_CONFLICT_DIALOG); + CleanupStack::PopAndDestroy(buf); + return ETrue; + } + else + { + } + + TBool retValue = ETrue; + RPointerArray calendarInfoList; + iController.GetAllCalendarInfoL(calendarInfoList); + CleanupClosePushL(calendarInfoList); + const TBool continueOnError = ETrue; + ReadDataFromFormL(continueOnError); + + iCalendarName->Des().Trim(); + // Check for the empty text + if ((!iCalendarName->Size())) + { + // If in editing mode, just save the name used before. + if (iEditFlag) + { + iCalendarName->Des().Copy(iCalendarInfo.NameL()); + SetEdwinTextL(ECalenMultiDbName, iCalendarName); + } + else + { + // else use the default name. + TInt index(KOne); + HBufC* calendarName = StringLoader::LoadLC(R_CALE_DB_CALENDAR); + TBuf numBuf; + + // Check if the name is already present. + while (IsNameFoundL(*calendarName)) + { + CleanupStack::PopAndDestroy(calendarName); + numBuf.Zero(); + if (index < KTen) + { + numBuf.Format(KFormatStringTwoDigit, index); + } + else + { + numBuf.Format(KFormatString, index); + } + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + numBuf); + calendarName = StringLoader::LoadLC( + R_CALE_DB_CALENDAR_DEFAULT_NAME, numBuf); + + ++index; + } + + iCalendarName->Des().Append(calendarName->Des()); + + CleanupStack::PopAndDestroy(calendarName); + SetEdwinTextL(ECalenMultiDbName, iCalendarName); + } + + } + + // Check for the validity of the calendar name. + if (IsNameValid(*iCalendarName)) + { + // Name is valid. then check if it already exists or not. + if (IsNameEditedL(*iCalendarName)) + { + TInt index = calendarInfoList.Find(*iCalendarName, + CCalenMultiDBEditor::CalenInfoIdentifierL); + if (index != KErrNotFound) + { + retValue = EFalse; + if (EAknCmdExit != aButtonId) + { + HBufC* infoText = StringLoader::LoadLC( + R_QTN_CALE_DB_ALREADY_EXISTS_NOTE, + iCalendarName->Des()); + CAknInformationNote* dialog = + new (ELeave) CAknInformationNote(ETrue); + dialog->ExecuteLD(*infoText); + CleanupStack::PopAndDestroy(infoText); + } + } + else + { + iCalendarInfo.SetNameL(*iCalendarName); + } + } + + } + else + { + if (EAknCmdExit != aButtonId) + { + retValue = EFalse; + HBufC* infoText(NULL); + infoText + = AreIllegalChars(*iCalendarName) + ? StringLoader::LoadLC( + R_CALEN_ILLEGAL_CHARACTERS) + : StringLoader::LoadLC( + R_CALEN_BAD_FILE_NAME); + CAknInformationNote* dialog = new (ELeave) CAknInformationNote( + ETrue); + dialog->ExecuteLD(*infoText); + CleanupStack::PopAndDestroy(infoText); + } + } + + if (IsColorEditedL(iColVal)) + { + iCalendarInfo.SetColor(iColVal); + } + + if (IsVisiblityFieldEditedL(iCalendarStatus)) + { + iCalendarInfo.SetEnabled(iCalendarStatus); + } + + CleanupStack::PopAndDestroy(&calendarInfoList); + TRACE_EXIT_POINT; + return retValue; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::ExecuteLD +// Launches the MultiDB Form +// --------------------------------------------------------------------------- +// +TInt CCalenMultiDBEditor::ExecuteLD() + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + return CAknForm::ExecuteLD(R_CALEN_MULTIDB_EDITOR); + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::ReadDataFromFormL +// Read all the data from the form. +// --------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::ReadDataFromFormL( TBool /*aContinueOnError */) + { + TRACE_ENTRY_POINT; + //Initial Name value + TPtr summary = iCalendarName->Des(); + + CEikEdwin* edwin = reinterpret_cast (Control( + ECalenMultiDbName)); + GetEdwinText(summary, ECalenMultiDbName); + + TRACE_EXIT_POINT; + } +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::IsNameEditedL +// Checks wether Name got edited or not. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::IsNameEditedL(const TDesC& aName) + { + TRACE_ENTRY_POINT; + HBufC* calendarName = iCalendarInfo.NameL().AllocLC(); + calendarName->Des().Trim(); + + TBool isEdited = EFalse; + if (calendarName->CompareF(aName)) + { + isEdited = ETrue; + } + CleanupStack::PopAndDestroy(); + TRACE_EXIT_POINT; + + return isEdited; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::IsNameFoundL +// Checks wether Name got edited or not. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::IsNameFoundL(const TDesC& aName) + { + TRACE_ENTRY_POINT; + + TBool retValue = EFalse; + RPointerArray calendarInfoList; + iController.GetAllCalendarInfoL(calendarInfoList); + CleanupClosePushL(calendarInfoList); + HBufC *calendarName = aName.AllocLC(); + + TInt index = calendarInfoList.Find( *calendarName, + CCalenMultiDBEditor::CalenInfoIdentifierL ); + + CleanupStack::PopAndDestroy( calendarName ); + CleanupStack::PopAndDestroy( &calendarInfoList ); + + // Name is matched. + if(index != KErrNotFound) + { + retValue = ETrue; + } + + TRACE_EXIT_POINT; + return retValue; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::AreIllegalChars +// Rest of the details are commented in header. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::AreIllegalChars( const TDesC& aName ) + { + TRACE_ENTRY_POINT; + + for ( TInt i( 0 ); KIllegalChars[ i ]; i++ ) + { + if ( aName.Locate( KIllegalChars[ i ] ) != KErrNotFound ) + { + // name is valid. + return ETrue; + } + } + TRACE_EXIT_POINT; + + return EFalse; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::IsValidName +// Rest of the details are commented in header. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::IsNameValid( const TDesC& aName ) + { + TRACE_ENTRY_POINT; + + // Check name for bad chars + const TUint16 KMinAllowedChar = 0x0020; + const TUint16 KParagraphSeparator = 0x2029; + const TUint16 KDot = '.'; + + TInt nameLen( aName.Length() ); + if ( !nameLen ) + { + return EFalse; + } + + for ( TInt i( 0 ); i < nameLen; i++ ) + { + TUint16 ch( aName[ i ] ); + if ( ch < KMinAllowedChar || ch == KParagraphSeparator ) + { + return EFalse; + } + } + + // File system ignores totally dot in the end of name, so + // we set here as not valid name, so that user gets correctly informed + if ( aName[ nameLen - 1 ] == KDot || AreIllegalChars( aName ) ) + { + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::IsColorEditedL +// Checks wether Color got edited or not. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::IsColorEditedL(TInt iColVal) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + return (iCalendarInfo.Color() != iColVal); + } + +// --------------------------------------------------------------------------- +// CCalenMultiDBEditor::IsVisiblityFieldEditedL +// Checks the visibility status of the calendar being edited. +// --------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::IsVisiblityFieldEditedL( TInt aCalendarStatus ) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + return (iCalendarInfo.Enabled() != aCalendarStatus ); + } + + +// ---------------------------------------------------------------------------- +// CCalenMultiDBEditor::HandleDialogPageEventL +// Process pointer event on the dialog. +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +void CCalenMultiDBEditor::HandleDialogPageEventL( TInt aEventID ) + { + TRACE_ENTRY_POINT; + + CAknForm::HandleDialogPageEventL( aEventID ); + if ( aEventID == MEikDialogPageObserver::EDialogPageTapped ) + { + TInt focusControl( IdOfFocusControl() ); + + switch(focusControl) + { + case ECalenMultiDbColor: + { + GetColorL(); + } + break; + + + + case ECalenMultiDbHiddenVisible: + { + iCalendarStatus = iCalendarInfo.Enabled(); + + if( ECalenMultiDbHidden == iCalendarStatus ) + { + SetVisiblityFieldL( ECalenMultiDbVisible ); + iCalendarStatus = ECalenMultiDbVisible; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + else + { + SetVisiblityFieldL( ECalenMultiDbHidden ); + iCalendarStatus = ECalenMultiDbHidden; + iCalendarInfo.SetEnabled(iCalendarStatus); + } + } + break; + + default: + { + + } + break; + } + } + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::LineChangedL +// This function gets called by the framework each time line is changed in +// the dialog (form). . +// We will use it for MSK label switching. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::LineChangedL( TInt aControlId ) + { + TRACE_ENTRY_POINT; + + CEikButtonGroupContainer& cba = ButtonGroupContainer (); + TInt resId = 0; + TInt controlId = aControlId; + + switch( controlId ) + { + case ECalenMultiDbName: + { + resId = R_CALEN_MULTIDB_MSK_EMPTY_CBA; + } + break; + + case ECalenMultiDbColor: + case ECalenMultiDbHiddenVisible: + { + resId = R_CALEN_MULTIDB_MSK_CHANGE_CBA; + } + break; + + default: + { + // No implementation yet. + } + break; + } + + // set desired CBA + cba.SetCommandSetL( resId ); + cba.DrawNow(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenEditorBase::PostLayoutDynInitL +// This is called in CEikDialog::ExecuteLD() after a form is drawn. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::PostLayoutDynInitL() + { + TRACE_ENTRY_POINT; + SetEditableL(ETrue); + + LineChangedL( ECalenMultiDbName ); + + CAknForm::PostLayoutDynInitL(); // chain back up to baseclass + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultipleDbUi::CalenInfoIdentifierL +// ----------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::CalenInfoIdentifierL( const HBufC* aName, + const CCalCalendarInfo& aCalendarInfo ) + { + TRACE_ENTRY_POINT; + HBufC* calendarName = aCalendarInfo.NameL().AllocLC(); + calendarName->Des().Trim(); + TBool retVal = EFalse; + retVal = calendarName->Compare(*aName); + CleanupStack::PopAndDestroy(); + TRACE_EXIT_POINT; + return (!retVal); + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::SetVisiblityFieldL +// Rest of the details are commented in header. +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::SetVisiblityFieldL( TBool aStatusVal ) + { + TRACE_ENTRY_POINT; + HBufC* statusString( NULL ); + CEikEdwin* fieldText =( CEikEdwin* )Control( ECalenMultiDbHiddenVisible ); + if( aStatusVal ) + { + // load string Visible + statusString = StringLoader::LoadLC( R_CALE_DB_SHOWN_SETTING ,iCoeEnv ); + } + else + { + // load string Hidden + statusString = StringLoader::LoadLC( R_CALE_DB_HIDDEN_SETTING ,iCoeEnv ); + } + // set status field string + fieldText->SetTextL( statusString ); + fieldText->DrawDeferred(); + CleanupStack::PopAndDestroy( statusString ); + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::SetTitlePaneL +// Rest of the details are commented in header. +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::SetTitlePaneL() + { + TRACE_ENTRY_POINT; + + CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane(); + + // Set empty navi pane label + iNaviContainer = static_cast( + sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); + iNaviContainer->PushDefaultL(); + + // Set title text + CAknTitlePane* tp = static_cast( + sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + HBufC* titleText = StringLoader::LoadLC( R_QTN_CALE_TITLE_CALENDAR , iCoeEnv ); + tp->SetTextL( *titleText ); + CleanupStack::PopAndDestroy( titleText ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::SetSyncFieldL +// Rest of the details are commented in header. +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::SetSyncFieldL( TBool aSyncVal ) + { + TRACE_ENTRY_POINT; + + if(!ControlOrNull(ECalenMultiDbSyncStatus)) + { + return; + } + + HBufC* syncString( NULL ); + CEikEdwin* syncFieldText =( CEikEdwin* )Control( ECalenMultiDbSyncStatus ); + if( EFalse == aSyncVal ) + { + // load string Off + syncString = StringLoader::LoadLC( R_CALE_SYNC_OFF , iCoeEnv ); + } + else + { + // load string On + syncString = StringLoader::LoadLC( R_CALE_SYNC_ON ,iCoeEnv ); + } + // set sync field string + syncFieldText->SetTextL( syncString ); + syncFieldText->DrawDeferred(); + CleanupStack::PopAndDestroy( syncString ); + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CheckSpaceBelowCriticalLevelL +// Checks if the Flash File System storage will fall below critical level. +// If there is not enough space, display an error message and return EFalse. +// Return ETrue otherwise. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCalenMultiDBEditor::CheckSpaceBelowCriticalLevelL() + { + TRACE_ENTRY_POINT; + + TBool retcode(EFalse); + if ( SysUtil::FFSSpaceBelowCriticalLevelL( &( iCoeEnv->FsSession() ) ) ) + { + ShowErrorNoteL(KErrDiskFull); + retcode = ETrue; + } + TRACE_EXIT_POINT; + return retcode; + } + +// ----------------------------------------------------------------------------- +// CCalenMultiDBEditor::ShowErrorNoteL +// ----------------------------------------------------------------------------- +// +void CCalenMultiDBEditor::ShowErrorNoteL(TInt aError) + { + TRACE_ENTRY_POINT + CErrorUI* errorUi = CErrorUI::NewLC(); + errorUi->ShowGlobalErrorNoteL( aError ); + CleanupStack::PopAndDestroy( errorUi ); + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::CDbColorPicture +// C++ Constructor +// ----------------------------------------------------------------------------- +// +CDbColorPicture::CDbColorPicture(TSize aSize) +: iSize(aSize) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::ExternalizeL +// Pure virtual from CPicture, intentionally empty. +// ----------------------------------------------------------------------------- +// +void CDbColorPicture::ExternalizeL(RWriteStream& ) const + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::GetOriginalSizeInTwips +// Convert size to twips +// ----------------------------------------------------------------------------- +// +void CDbColorPicture::GetOriginalSizeInTwips(TSize& /*aSize*/ ) const + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::SetRgbColorsL +// ----------------------------------------------------------------------------- +// +void CDbColorPicture::SetRgbColorsL(TRgb aColors) + { + TRACE_ENTRY_POINT; + iColors = aColors; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CDbColorPicture::Draw +// Draw funtion to draw the map icon +// ----------------------------------------------------------------------------- +// +void CDbColorPicture::Draw(CGraphicsContext& aGc, + const TPoint& aTopLeft , + const TRect& /*aClipRect*/ , + MGraphicsDeviceMap* /*aMap*/ ) const + { + TRACE_ENTRY_POINT; + + + //aGc.Reset(); + aGc.CancelClippingRect(); + + TSize pixelsize; + pixelsize.iWidth = 225; + pixelsize.iHeight = 16; + TPoint aPoint; + TRect area = TRect(aTopLeft, pixelsize); + area.Move(0,-11); + // Draw a datbase color rectangle + aGc.SetBrushColor(iColors); + aGc.SetBrushStyle(CGraphicsContext::ESolidBrush); + + aGc.DrawRect(area); + } + +// End of File