48 #include "c_xnutils.h" |
48 #include "c_xnutils.h" |
49 #include "xntexteditor.h" |
49 #include "xntexteditor.h" |
50 |
50 |
51 const TInt KMaxLength = 100; |
51 const TInt KMaxLength = 100; |
52 |
52 |
|
53 enum TSplitInputState |
|
54 { |
|
55 ESplitInputDisabled = 0, |
|
56 ESplitInputClosed, |
|
57 ESplitInputOpen, |
|
58 ESplitInputRemoveFromStack |
|
59 }; |
|
60 |
53 _LIT8( KCpsPublishing, "cpspublishing" ); |
61 _LIT8( KCpsPublishing, "cpspublishing" ); |
54 _LIT8( KMaxLineAmount, "max-line-amount" ); |
62 _LIT8( KMaxLineAmount, "max-line-amount" ); |
55 _LIT8( KMaxCharAmount, "max-char-amount" ); |
63 _LIT8( KMaxCharAmount, "max-char-amount" ); |
56 _LIT8( KEnablePartialInput, "splitinputenabled" ); |
64 _LIT8( KEnablePartialInput, "splitinputenabled" ); |
57 |
65 |
173 |
181 |
174 iEditor->SetSuppressBackgroundDrawing( ETrue ); |
182 iEditor->SetSuppressBackgroundDrawing( ETrue ); |
175 |
183 |
176 // Enable partial Screen |
184 // Enable partial Screen |
177 CXnProperty* enablepartialinput( iNode.GetPropertyL( KEnablePartialInput ) ); |
185 CXnProperty* enablepartialinput( iNode.GetPropertyL( KEnablePartialInput ) ); |
178 iPartialInputEnabled = EFalse; |
186 iSplitInputState = ESplitInputDisabled; |
179 iPartialInputOpen = EFalse; |
|
180 |
187 |
181 if ( enablepartialinput && |
188 if ( enablepartialinput && |
182 enablepartialinput->StringValue() == XnPropertyNames::KTrue ) |
189 enablepartialinput->StringValue() == XnPropertyNames::KTrue ) |
183 { |
190 { |
184 iEditor->SetAknEditorFlags( EAknEditorFlagEnablePartialScreen ); |
191 iEditor->SetAknEditorFlags( EAknEditorFlagEnablePartialScreen ); |
185 iPartialInputEnabled = ETrue; |
192 iSplitInputState = ESplitInputClosed; |
186 } |
193 } |
187 |
194 |
188 iEditor->SetObserver( this ); |
195 iEditor->SetObserver( this ); |
189 |
196 |
190 // Default not focused |
197 // Default not focused |
308 |
315 |
309 if ( isFocused ) |
316 if ( isFocused ) |
310 { |
317 { |
311 value = EPSAiDontForwardNumericKeysToPhone; |
318 value = EPSAiDontForwardNumericKeysToPhone; |
312 |
319 |
313 if( !iPartialInputEnabled ) |
320 if( iSplitInputState == ESplitInputDisabled ) |
314 { |
321 { |
315 TRAP_IGNORE( appui->AddToStackL( appui->View(), iEditor ) ); |
322 TRAP_IGNORE( appui->AddToStackL( appui->View(), iEditor ) ); |
316 // AddToStackL calls iEditor->SetFocus( ETrue ); |
323 // AddToStackL calls iEditor->SetFocus( ETrue ); |
317 } |
324 } |
318 |
325 else if( iSplitInputState == ESplitInputClosed ) |
|
326 { |
|
327 iUiEngine->EnablePartialTouchInput(iNode , ETrue); |
|
328 TRAP_IGNORE( appui->AddToStackL( appui->View(), iEditor ) ); |
|
329 iSplitInputState = ESplitInputOpen; |
|
330 } |
319 } |
331 } |
320 else |
332 else |
321 { |
333 { |
322 value = EPSAiForwardNumericKeysToPhone; |
334 value = EPSAiForwardNumericKeysToPhone; |
323 |
335 |
324 if( !iPartialInputEnabled ) |
336 if( iSplitInputState == ESplitInputDisabled ) |
325 { |
337 { |
326 appui->RemoveFromStack( iEditor ); |
338 appui->RemoveFromStack( iEditor ); |
327 iEditor->SetFocus( EFalse, aDrawNow ); |
339 iEditor->SetFocus( EFalse, aDrawNow ); |
328 } |
340 } |
329 else if(iPartialInputEnabled && iRemoveSplitInputFromStack ) |
341 else if( iSplitInputState == ESplitInputRemoveFromStack ) |
330 { |
342 { |
331 appui->RemoveFromStack( iEditor ); |
343 appui->RemoveFromStack( iEditor ); |
332 iEditor->SetFocus( EFalse, aDrawNow ); |
344 iEditor->SetFocus( EFalse, aDrawNow ); |
333 iPartialInputOpen = EFalse; |
345 iSplitInputState = ESplitInputClosed; |
334 iRemoveSplitInputFromStack = EFalse; |
346 } |
335 } |
347 } |
336 |
348 |
337 } |
349 if( iSplitInputState == ESplitInputOpen ) |
338 |
|
339 if(iPartialInputOpen) |
|
340 { |
350 { |
341 value = EPSAiDontForwardNumericKeysToPhone; |
351 value = EPSAiDontForwardNumericKeysToPhone; |
342 } |
352 } |
343 |
353 |
344 iRefusesFocusLoss = isFocused; |
354 iRefusesFocusLoss = isFocused; |
408 // |
418 // |
409 void CXnTextEditorAdapter::HandleEditorEvent( TInt aReason ) |
419 void CXnTextEditorAdapter::HandleEditorEvent( TInt aReason ) |
410 { |
420 { |
411 CXnAppUiAdapter* appui( |
421 CXnAppUiAdapter* appui( |
412 static_cast< CXnAppUiAdapter* >( iAvkonAppUi ) ); |
422 static_cast< CXnAppUiAdapter* >( iAvkonAppUi ) ); |
413 |
423 |
414 switch( aReason ) |
424 switch( aReason ) |
415 { |
425 { |
416 case CXnTextEditor::KActivateTextEditor: |
|
417 { |
|
418 if( !iPartialInputOpen ) |
|
419 { |
|
420 iUiEngine->EnablePartialTouchInput(iNode , ETrue); |
|
421 TRAP_IGNORE( appui->AddToStackL( appui->View(), iEditor ) ); |
|
422 iPartialInputOpen = ETrue; |
|
423 } |
|
424 break; |
|
425 } |
|
426 case CXnTextEditor::KDeactivateTextEditor: |
426 case CXnTextEditor::KDeactivateTextEditor: |
427 { |
427 { |
428 if( iPartialInputOpen ) |
428 if( iSplitInputState == ESplitInputOpen ) |
429 { |
429 { |
430 iUiEngine->EnablePartialTouchInput(iNode, EFalse); |
430 iUiEngine->EnablePartialTouchInput(iNode, EFalse); |
431 iPartialInputOpen = EFalse; |
431 iSplitInputState = ESplitInputClosed; |
432 appui->RemoveFromStack( iEditor ); |
432 appui->RemoveFromStack( iEditor ); |
433 iEditor->SetFocus( EFalse ); |
433 iEditor->SetFocus( EFalse ); |
434 } |
434 } |
435 break; |
435 break; |
436 } |
436 } |
437 case CXnTextEditor::KRemoveSplitInputFromStack: |
437 case CXnTextEditor::KRemoveSplitInputFromStack: |
438 { |
438 { |
439 iRemoveSplitInputFromStack = ETrue; |
439 iSplitInputState = ESplitInputRemoveFromStack; |
440 break; |
440 break; |
441 } |
441 } |
442 case CXnTextEditor::KKeepSplitInputInStack: |
442 case CXnTextEditor::KKeepSplitInputInStack: |
443 { |
443 { |
444 iRemoveSplitInputFromStack = EFalse; |
444 iSplitInputState = ESplitInputOpen; |
445 break; |
445 break; |
446 } |
446 } |
447 default: |
447 default: |
448 break; |
448 break; |
449 } |
449 } |