diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/* -* Copyright (c) 2002-2004 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: Kuten code query dialog -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include -#include -#include -#include // CAknInformationNote -#include -#include -#include //keys -#include -#include - -#include "AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h" - -// MACROS - -// CONSTANTS -const TInt KKutenCodeLength = 4; -const TInt KDummyUnicode = 0xfffd; -const TInt KTextKutenCodeErrorMaxSize = 32; -const TText KHalfWidthNotSign = 0x00AC; -const TText KFullWidthNotSign = 0xFFE2; - -// ================= MEMBER FUNCTIONS ========================================= - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog* -CAknFepUICtrlJapaneseKutenQueryDialog::NewL(TInt& aCharCode, const TTone& aTone) - { - CAknFepUICtrlJapaneseKutenQueryDialog* self = - new (ELeave) CAknFepUICtrlJapaneseKutenQueryDialog(aCharCode, aTone); - - return self; - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::~CAknFepUICtrlJapaneseKutenQueryDialog() -// Destructor. -// ---------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog::~CAknFepUICtrlJapaneseKutenQueryDialog() - { - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::OfferKeyEventL -// -// ---------------------------------------------------------------------------- -// -TKeyResponse CAknFepUICtrlJapaneseKutenQueryDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType) -{ - if (aType == EEventKey) - { - TInt keyCode = aKeyEvent.iCode; - switch(keyCode) - { - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - { - if (iDataText.Length() == KKutenCodeLength) - { - if (SoundSystem()) - { - SoundSystem()->PlaySound(EErrorTone); - } - } - } - break; - default: - break; - } - } - return CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType); -} - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::OkToExitL -// This function is called in case pressing OK or Cancel -// ----------------------------------------------------------------------------- -// -TBool CAknFepUICtrlJapaneseKutenQueryDialog::OkToExitL(TInt aButtonId) - { - TBool checkResult = EFalse; - iCharCode = ConvertKutenCode2Unicode(); - if (iCharCode > 0) - { - checkResult = CAknTextQueryDialog::OkToExitL(aButtonId); - } - else - { - TResourceReader reader; - TBufC string; - CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AKNFEP_TEXT_KUTEN_INVALID_ERROR); - string = reader.ReadTPtrC(); - CleanupStack::PopAndDestroy(); // reader - - CAknInformationNote* dialog = new(ELeave) CAknInformationNote(); - dialog->ExecuteLD(string); - - CAknQueryControl* control = QueryControl(); - if (control) - { - control->SetTextL(KNullDesC); - control->DrawNow(); - } - - UpdateLeftSoftKeyL(); - } - - return checkResult; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::UpdateLeftSoftKeyL -// Updating left softkey -// -// If control text is ok then display left soft key -// otherwise don't -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseKutenQueryDialog::UpdateLeftSoftKeyL() - { - CAknQueryControl* control = QueryControl(); - if ( control ) - { - MakeLeftSoftkeyVisibleL(); - } - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::CAknFepUICtrlJapaneseKutenQueryDialog() -// Overload constructor. -//----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog::CAknFepUICtrlJapaneseKutenQueryDialog( - TInt& aCharCode, const TTone& aTone) - : CAknTextQueryDialog(iBuffer, aTone), - iCharCode(aCharCode), - iCbaResId(R_AVKON_SOFTKEYS_CANCEL) - { - iCharCode = 0; - } - -TInt CAknFepUICtrlJapaneseKutenQueryDialog::ExecuteLD(TInt aResourceId) - { - PrepareLC(aResourceId); - CEikEdwin* edwin = STATIC_CAST(CEikEdwin*, (QueryControl()->ControlByLayoutOrNull(EDataLayout))); - edwin->SetAknEditorAllowedInputModes(EAknEditorNumericInputMode); - edwin->SetAknEditorNumericKeymap(EAknEditorPlainNumberModeKeymap); - return(RunLD()); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::MakeLeftSoftkeyVisibleL -// Set visibility of the left softkey. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseKutenQueryDialog::MakeLeftSoftkeyVisibleL() - { - TBool visible = EFalse; - CAknQueryControl* control = QueryControl(); - if (control) - { - control->GetText(iDataText); - if (iDataText.Length() == KKutenCodeLength) - { - visible = ETrue; - } - } - else - { - visible = EFalse; - } - - TUint resid = R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY; - if (visible) - { - resid = R_AVKON_SOFTKEYS_OK_CANCEL__OK; - } - if (iCbaResId != resid) - { - ButtonGroupContainer().SetCommandSetL(resid); - ButtonGroupContainer().DrawDeferred(); - iCbaResId = resid; - } - - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::ConvertKutenCode2Unicode -// Convert from Kuten code to unicode, Kuten code is 4 characters which inputted in query dialog. -// ----------------------------------------------------------------------------- -TText CAknFepUICtrlJapaneseKutenQueryDialog::ConvertKutenCode2Unicode() - { - TText code = 0; - if (iBuffer.Length() == KKutenCodeLength) - { - TBuf<4 + 1> buf; - TBool valid = ETrue; - buf.FillZ(4 + 1); - - for (TInt i = 0; i < KKutenCodeLength; ++i) - { - if ((iBuffer[i] >= '0') && (iBuffer[i] <= '9')) - { - buf[i] = (TText)(iBuffer[i] - '0'); - } - else - { - valid = EFalse; - break; - } - } - if (valid) - { - TInt hi_code = buf[0] * 10 + buf[1] + 0x20; - TInt low_code = buf[2] * 10 + buf[3] + 0x20; - code = (TText)((hi_code << 8) + low_code); - AdjustJisCode(code); - code = JisToSjis((TText)code); - if (AdjustSjisCode(code)) - { - code = ConvSjisToUnicode(code); - } - else - { - code = 0; - } - } - } - - // '0244" Kuten codes is converted to '0x00AC' unicode of half-width - // character. In Japanese variant, Kuten code input must be always - // Full-width character, so it converts from '0x00AC' to '0xFFE2' - if (code == KHalfWidthNotSign) - { - code = KFullWidthNotSign; - } - - return code; - } - -void CAknFepUICtrlJapaneseKutenQueryDialog::AdjustJisCode(TText& aJisCode) - { - TUint JisHi = (aJisCode >> 8) & 0x000000ff; - TUint JisLow = aJisCode & 0x000000ff; - - if ((JisHi < EJisFirstMin) || (JisHi > EJisFirstMax)) - { - JisHi = 0; - JisLow = 0; - } - else - { - if ((JisLow < EJisSecondMin) || (JisLow > EJisSecondMax)) - { - JisHi = 0; - JisLow = 0; - } - else - { - if (JisHi == EJisFirstMax) - { - if (JisLow > EJisLastSecondMax) - { - JisHi = 0; - JisLow = 0; - } - } - } - } - - aJisCode = (TText)((JisHi << 8) + JisLow); - return; - } - -TBool CAknFepUICtrlJapaneseKutenQueryDialog::AdjustSjisCode(TText& aSjisCode) -{ - TUint SjisHi = (aSjisCode >> 8) & 0x000000ff; - TUint SjisLow = aSjisCode & 0x000000ff; - - if ((SjisHi < ESjisFirstMin1) || (SjisHi > ESjisFirstMax2) - || ((SjisHi > ESjisFirstMax1) && (SjisHi < ESjisFirstMin2))) - { - SjisHi = 0; - SjisLow = 0; - } - else - { - if ((SjisLow < ESjisSecondMin1) || (SjisLow > ESjisSecondMax2) - || ((SjisLow > ESjisSecondMax1) && (SjisLow < ESjisSecondMin2))) - { - SjisHi = 0; - SjisLow = 0; - } - - /* - else - { - if (SjisHi == ESjisFirstMax2) - { - if (SjisLow > ESjisSecondMax2) - { - SjisHi = 0; - SjisLow = 0; - } - } - } - */ - } - - if (CheckSjisCode((TText)((SjisHi << 8) + SjisLow))) - { - aSjisCode = (TText)((SjisHi << 8) + SjisLow); - return ETrue; - } - else - { - return EFalse; - } - } - -TText CAknFepUICtrlJapaneseKutenQueryDialog::JisToSjis(TText aJisCode) - { - if (aJisCode == 0) - { - return 0; - } - - TUint jis_hi = (aJisCode >> 8) & 0x000000ff; /* hi byte */ - TUint jis_lo = aJisCode & 0x000000ff; /* low byte */ - - jis_lo += 0x1F; - if ((jis_hi & 1) == 0) - { - jis_hi >>= 1; - jis_hi--; - jis_lo += 0x5E; - } - else - { - jis_hi >>= 1; - } - if (jis_lo >= 0x7F) - { - jis_lo++; - } - jis_hi += (jis_hi > 0x2E) ? 0xB1 : 0x71; - - return (TText)((jis_hi << 8) + jis_lo); - } - -TBool CAknFepUICtrlJapaneseKutenQueryDialog::CheckSjisCode(TText aSjisCode) - { - const TText8 first = (TText8)((aSjisCode >> 8) & 0x000000ff); - const TText8 second = (TText8)(aSjisCode & 0x000000ff); - if ((((first >= ESjisFirstMin1) && (first <= ESjisFirstMax1)) - || ((first >= ESjisFirstMin2) && (first <= ESjisFirstMax2))) - && (((second >= ESjisSecondMin1) && (second <= ESjisSecondMax1)) - || ((second >= ESjisSecondMin2) && (second <= ESjisSecondMax2)))) - { - return ETrue; - } - else - { - return EFalse; - } - } - -TText CAknFepUICtrlJapaneseKutenQueryDialog::ConvSjisToUnicode(TText aSjisCode) - { - TText8 sjis[2]; - TText unicode = 0; - if (aSjisCode & 0xff00) - { - sjis[0] = (TText8)((aSjisCode & 0xff00) >> 8); - sjis[1] = (TText8)(aSjisCode & 0x00ff); - } - else - { - sjis[0] = (TText8)aSjisCode; - sjis[1] = '\0'; - } - - TPtrC8 foreign((TUint8*)&sjis[0], sizeof sjis); - TPtr16 unicode_des((TUint16*)&unicode, 1); - RFs fileServerSession; - - if (fileServerSession.Connect() == 0) - { - CCnvCharacterSetConverter* charconv = NULL; - TRAPD(error, charconv = CCnvCharacterSetConverter::NewL()); - if (error == KErrNone) - { - TRAP(error, charconv->PrepareToConvertToOrFromL(KCharacterSetIdentifierShiftJis, fileServerSession)); - if (error == KErrNone) - { - TInt state = CCnvCharacterSetConverter::KStateDefault; - charconv->ConvertToUnicode(unicode_des, foreign, state); - } - delete charconv; - } - fileServerSession.Close(); - } - if (unicode == (TText)KDummyUnicode) - { - unicode = 0; - } - return unicode; - } - -// End of File