29 #include "PlatformKeyboardEvent.h" |
29 #include "PlatformKeyboardEvent.h" |
30 #include "DebugStream.h" |
30 #include "DebugStream.h" |
31 #include "WebView.h" |
31 #include "WebView.h" |
32 #include "WebFrame.h" |
32 #include "WebFrame.h" |
33 #include "WebFormFill.h" |
33 #include "WebFormFill.h" |
34 #include "HTMLNames.h" |
34 #include "HtmlNames.h" |
35 #include "WebFepTextEditor.h" |
35 #include "WebFepTextEditor.h" |
36 #include <EIKCOCTL.rsg> |
36 #include <eikcoctl.rsg> |
37 #include <eikon.hrh> |
37 #include <eikon.hrh> |
38 |
38 |
39 |
39 |
40 using namespace WebCore; |
40 using namespace WebCore; |
41 using namespace HTMLNames; |
41 using namespace HTMLNames; |
315 //----------------------------------------------------------------------------- |
315 //----------------------------------------------------------------------------- |
316 // WebEditorClient::handleKeypress |
316 // WebEditorClient::handleKeypress |
317 //----------------------------------------------------------------------------- |
317 //----------------------------------------------------------------------------- |
318 void WebEditorClient::handleKeypress(KeyboardEvent* event) |
318 void WebEditorClient::handleKeypress(KeyboardEvent* event) |
319 { |
319 { |
320 if (!m_webView && !m_webView->page()) { |
320 if (!(m_webView && m_webView->page())) { |
321 return; |
321 return; |
322 } |
322 } |
323 |
323 |
324 Frame* frame = m_webView->page()->mainFrame(); |
324 Frame* frame = m_webView->page()->mainFrame(); |
325 if (!frame) { |
325 if (!frame) { |
378 else |
378 else |
379 { |
379 { |
380 frame->editor()->execCommand("MoveLeft"); |
380 frame->editor()->execCommand("MoveLeft"); |
381 } |
381 } |
382 m_webView->fepTextEditor()->HandleUpdateCursor(); |
382 m_webView->fepTextEditor()->HandleUpdateCursor(); |
383 if (frame->selectionController()->start() != startPos && |
383 if (frame->selectionController()->start() == startPos && |
384 frame->selectionController()->end() != endPos) { |
384 frame->selectionController()->end() == endPos && !select) { |
|
385 m_shouldEndEditing = !(m_webView->fepTextEditor()->IsTextAreaFocused() || m_webView->fepTextEditor()->IsInputElementFocused()); |
|
386 } |
|
387 else { |
385 event->setDefaultHandled(); |
388 event->setDefaultHandled(); |
386 } |
|
387 else { |
|
388 m_shouldEndEditing = !m_webView->fepTextEditor()->IsTextAreaFocused(); |
|
389 } |
389 } |
390 break; |
390 break; |
391 |
391 |
392 case EKeyRightArrow: |
392 case EKeyRightArrow: |
393 if (select)//If shift is pressed then highlight the selection |
393 if (select)//If shift is pressed then highlight the selection |
401 else |
401 else |
402 { |
402 { |
403 frame->editor()->execCommand("MoveRight"); |
403 frame->editor()->execCommand("MoveRight"); |
404 } |
404 } |
405 m_webView->fepTextEditor()->HandleUpdateCursor(); |
405 m_webView->fepTextEditor()->HandleUpdateCursor(); |
406 if (frame->selectionController()->start() != startPos && |
406 if (frame->selectionController()->start() == startPos && |
407 frame->selectionController()->end() != endPos) { |
407 frame->selectionController()->end() == endPos && !select) { |
|
408 m_shouldEndEditing = !(m_webView->fepTextEditor()->IsTextAreaFocused() || m_webView->fepTextEditor()->IsInputElementFocused()); |
|
409 } |
|
410 else { |
408 event->setDefaultHandled(); |
411 event->setDefaultHandled(); |
409 } |
412 } |
|
413 break; |
|
414 |
|
415 case EKeyUpArrow: |
|
416 if (select) { //If shift is pressed then highlight the selection |
|
417 if(kevent->isKeyDown()) |
|
418 break; |
|
419 frame->editor()->execCommand("MoveUpAndModifySelection");//from createCommandMap() |
|
420 } |
410 else { |
421 else { |
411 m_shouldEndEditing = !m_webView->fepTextEditor()->IsTextAreaFocused(); |
422 frame->editor()->execCommand("MoveUp"); |
412 } |
423 } |
413 break; |
|
414 |
|
415 case EKeyUpArrow: |
|
416 frame->editor()->execCommand("MoveUp"); |
|
417 m_webView->fepTextEditor()->HandleUpdateCursor(); |
424 m_webView->fepTextEditor()->HandleUpdateCursor(); |
418 if (frame->selectionController()->start() != startPos && |
425 if (frame->selectionController()->start() == startPos && |
419 frame->selectionController()->end() != endPos) { |
426 frame->selectionController()->end() == endPos && !select) { |
|
427 m_shouldEndEditing = true; |
|
428 } |
|
429 else { |
420 event->setDefaultHandled(); |
430 event->setDefaultHandled(); |
421 } |
431 } |
|
432 break; |
|
433 |
|
434 case EKeyDownArrow: |
|
435 if (select) {//If shift is pressed then highlight the selection |
|
436 if(kevent->isKeyDown()) |
|
437 break; |
|
438 frame->editor()->execCommand("MoveDownAndModifySelection");//from createCommandMap() |
|
439 } |
422 else { |
440 else { |
|
441 frame->editor()->execCommand("MoveDown"); |
|
442 } |
|
443 m_webView->fepTextEditor()->HandleUpdateCursor(); |
|
444 if (frame->selectionController()->start() == startPos && |
|
445 frame->selectionController()->end() == endPos && !select) { |
423 m_shouldEndEditing = true; |
446 m_shouldEndEditing = true; |
424 } |
447 } |
425 break; |
448 else { |
426 |
|
427 case EKeyDownArrow: |
|
428 frame->editor()->execCommand("MoveDown"); |
|
429 m_webView->fepTextEditor()->HandleUpdateCursor(); |
|
430 if (frame->selectionController()->start() != startPos && |
|
431 frame->selectionController()->end() != endPos) { |
|
432 event->setDefaultHandled(); |
449 event->setDefaultHandled(); |
433 } |
|
434 else { |
|
435 m_shouldEndEditing = true; |
|
436 } |
450 } |
437 break; |
451 break; |
438 |
452 |
439 case EKeyEnter: |
453 case EKeyEnter: |
440 case EKeyDevice3: |
454 case EKeyDevice3: |
449 } |
463 } |
450 } |
464 } |
451 break; |
465 break; |
452 |
466 |
453 case EKeyF18: |
467 case EKeyF18: |
454 if (magnify) |
|
455 { |
|
456 switch (kevent->symbianEvent().iScanCode) |
|
457 { |
|
458 case EEikCmdEditCut: |
|
459 m_webView->fepTextEditor()->CcpuCutL(); |
|
460 frame->editor()->deleteWithDirection(SelectionController::BACKWARD, |
|
461 CharacterGranularity, false, true); |
|
462 m_webView->fepTextEditor()->HandleUpdateCursor(); |
|
463 break; |
|
464 case EEikCmdEditCopy: |
|
465 m_webView->fepTextEditor()->CcpuCopyL(); |
|
466 break; |
|
467 case EEikCmdEditPaste: |
|
468 m_webView->fepTextEditor()->CcpuPasteL(); |
|
469 break; |
|
470 default: |
|
471 break; |
|
472 } |
|
473 } |
|
474 break; |
468 break; |
475 |
469 |
476 // All of the diagonal KeyEvents are allowed to flow through the "default" case... |
470 // All of the diagonal KeyEvents are allowed to flow through the "default" case... |
477 // |
471 // |
478 // case EKeyRightUpArrow: // Northeast |
472 // case EKeyRightUpArrow: // Northeast |
504 case EHotKeyPaste: |
498 case EHotKeyPaste: |
505 m_webView->fepTextEditor()->CcpuPasteL(); |
499 m_webView->fepTextEditor()->CcpuPasteL(); |
506 break; |
500 break; |
507 } |
501 } |
508 |
502 |
|
503 if(m_webView->fepTextEditor()->inlineTextEditingStarted()) |
|
504 return; |
509 if (TChar(kevent->symbianEvent().iCode).IsPrint()) { |
505 if (TChar(kevent->symbianEvent().iCode).IsPrint()) { |
510 if (m_webView->fepTextEditor()->DocumentLengthForFep() < |
506 if (m_webView->fepTextEditor()->DocumentLengthForFep() < |
511 m_webView->fepTextEditor()->DocumentMaximumLengthForFep()) { |
507 m_webView->fepTextEditor()->DocumentMaximumLengthForFep()) { |
512 TText c = kevent->symbianEvent().iCode; |
508 TText c = kevent->symbianEvent().iCode; |
513 handleInsertText(frame, String(TPtrC(&c,1))); |
509 handleInsertText(frame, String(TPtrC(&c,1))); |
524 } |
520 } |
525 |
521 |
526 //----------------------------------------------------------------------------- |
522 //----------------------------------------------------------------------------- |
527 // WebEditorClient::handleInputMethodKeypress |
523 // WebEditorClient::handleInputMethodKeypress |
528 //----------------------------------------------------------------------------- |
524 //----------------------------------------------------------------------------- |
529 void WebEditorClient::handleInputMethodKeypress(KeyboardEvent*) |
525 void WebEditorClient::handleInputMethodKeypress(KeyboardEvent* event) |
530 { |
526 { |
531 notImplemented(); |
527 const PlatformKeyboardEvent* kevent = event->keyEvent(); |
|
528 if(kevent->isKeyDown()) |
|
529 handleKeypress(event); |
532 } |
530 } |
533 |
531 |
534 //----------------------------------------------------------------------------- |
532 //----------------------------------------------------------------------------- |
535 // WebEditorClient::textFieldDidBeginEditing |
533 // WebEditorClient::textFieldDidBeginEditing |
536 //----------------------------------------------------------------------------- |
534 //----------------------------------------------------------------------------- |
561 //----------------------------------------------------------------------------- |
559 //----------------------------------------------------------------------------- |
562 // WebEditorClient::doTextFieldCommandFromEvent |
560 // WebEditorClient::doTextFieldCommandFromEvent |
563 //----------------------------------------------------------------------------- |
561 //----------------------------------------------------------------------------- |
564 bool WebEditorClient::doTextFieldCommandFromEvent(Element*, KeyboardEvent*) |
562 bool WebEditorClient::doTextFieldCommandFromEvent(Element*, KeyboardEvent*) |
565 { |
563 { |
566 notImplemented(); |
564 |
567 return false; |
565 notImplemented(); |
|
566 return false; |
568 } |
567 } |
569 |
568 |
570 //----------------------------------------------------------------------------- |
569 //----------------------------------------------------------------------------- |
571 // WebEditorClient::textWillBeDeletedInTextField |
570 // WebEditorClient::textWillBeDeletedInTextField |
572 //----------------------------------------------------------------------------- |
571 //----------------------------------------------------------------------------- |