18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EditorClientWx.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EditCommand.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Editor.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FocusController.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h"
35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "HostWindow.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "KeyboardEvent.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformKeyboardEvent.h"
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SelectionController.h"
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebFrame.h"
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebFramePrivate.h"
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebView.h"
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebViewPrivate.h"
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WindowsKeyboardCodes.h"
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdio.h>
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned CtrlKey = 1 << 0;
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned AltKey = 1 << 1;
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned ShiftKey = 1 << 2;
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstruct KeyDownEntry {
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned virtualKey;
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned modifiers;
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const char* name;
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstruct KeyPressEntry {
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned charCode;
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned modifiers;
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const char* name;
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const KeyDownEntry keyDownEntries[] = {
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_LEFT,   0,                  "MoveLeft"                                    },
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_LEFT,   ShiftKey,           "MoveLeftAndModifySelection"                  },
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_LEFT,   CtrlKey,            "MoveWordLeft"                                },
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_LEFT,   CtrlKey | ShiftKey, "MoveWordLeftAndModifySelection"              },
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RIGHT,  0,                  "MoveRight"                                   },
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RIGHT,  ShiftKey,           "MoveRightAndModifySelection"                 },
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RIGHT,  CtrlKey,            "MoveWordRight"                               },
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RIGHT,  CtrlKey | ShiftKey, "MoveWordRightAndModifySelection"             },
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_UP,     0,                  "MoveUp"                                      },
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_UP,     ShiftKey,           "MoveUpAndModifySelection"                    },
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_PRIOR,  ShiftKey,           "MovePageUpAndModifySelection"                },
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_DOWN,   0,                  "MoveDown"                                    },
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_DOWN,   ShiftKey,           "MoveDownAndModifySelection"                  },
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_NEXT,   ShiftKey,           "MovePageDownAndModifySelection"              },
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_PRIOR,  0,                  "MovePageUp"                                  },
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_NEXT,   0,                  "MovePageDown"                                },
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_HOME,   0,                  "MoveToBeginningOfLine"                       },
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_HOME,   ShiftKey,           "MoveToBeginningOfLineAndModifySelection"     },
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_HOME,   CtrlKey,            "MoveToBeginningOfDocument"                   },
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_HOME,   CtrlKey | ShiftKey, "MoveToBeginningOfDocumentAndModifySelection" },
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_END,    0,                  "MoveToEndOfLine"                             },
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_END,    ShiftKey,           "MoveToEndOfLineAndModifySelection"           },
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_END,    CtrlKey,            "MoveToEndOfDocument"                         },
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_END,    CtrlKey | ShiftKey, "MoveToEndOfDocumentAndModifySelection"       },
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_BACK,   0,                  "DeleteBackward"                              },
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_BACK,   ShiftKey,           "DeleteBackward"                              },
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_DELETE, 0,                  "DeleteForward"                               },
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_BACK,   CtrlKey,            "DeleteWordBackward"                          },
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_DELETE, CtrlKey,            "DeleteWordForward"                           },
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { 'B',       CtrlKey,            "ToggleBold"                                  },
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { 'I',       CtrlKey,            "ToggleItalic"                                },
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_ESCAPE, 0,                  "Cancel"                                      },
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    //FIXME: this'll never happen. We can trash it or make it a normal period
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_OEM_PERIOD, CtrlKey,        "Cancel"                                      },
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_TAB,    0,                  "InsertTab"                                   },
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_TAB,    ShiftKey,           "InsertBacktab"                               },
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RETURN, 0,                  "InsertNewline"                               },
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RETURN, CtrlKey,            "InsertNewline"                               },
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { VK_RETURN, AltKey,             "InsertNewline"                               },
1120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    { VK_RETURN, ShiftKey,           "InsertLineBreak"                               },
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { 'A',       CtrlKey,            "SelectAll"                                   },
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { 'Z',       CtrlKey,            "Undo"                                        },
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { 'Z',       CtrlKey | ShiftKey, "Redo"                                        },
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const KeyPressEntry keyPressEntries[] = {
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\t',   0,                  "InsertTab"                                   },
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\t',   ShiftKey,           "InsertBacktab"                               },
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\r',   0,                  "InsertNewline"                               },
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\r',   CtrlKey,            "InsertNewline"                               },
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\r',   AltKey,             "InsertNewline"                               },
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    { '\r',   AltKey | ShiftKey,  "InsertNewline"                               },
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEditorClientWx::~EditorClientWx()
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_page = NULL;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::setPage(Page* page)
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_page = page;
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::pageDestroyed()
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    delete this;
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldDeleteRange(Range*)
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldShowDeleteInterface(HTMLElement*)
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::smartInsertDeleteEnabled()
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool EditorClientWx::isSelectTrailingWhitespaceEnabled()
161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    notImplemented();
163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return false;
164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::isContinuousSpellCheckingEnabled()
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::toggleContinuousSpellChecking()
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::isGrammarCheckingEnabled()
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::toggleGrammarChecking()
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint EditorClientWx::spellCheckerDocumentTag()
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::selectWordBeforeMenuEvent()
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldBeginEditing(Range*)
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldEndEditing(Range*)
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldInsertNode(Node*, Range*,
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       EditorInsertAction)
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldInsertText(const String&, Range*,
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       EditorInsertAction)
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldApplyStyle(CSSStyleDeclaration*,
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       Range*)
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldMoveRangeAfterDelete(Range*, Range*)
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldChangeSelectedRange(Range* fromRange, Range* toRange,
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                EAffinity, bool stillSelecting)
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didBeginEditing()
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::respondToChangedContents()
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    Frame* frame = m_page->focusController()->focusedOrMainFrame();
2545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
2555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    if (frame) {
2565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
2575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        if (webKitWin) {
2585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            wxWebViewContentsChangedEvent wkEvent(webKitWin);
2595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            webKitWin->GetEventHandler()->ProcessEvent(wkEvent);
2605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        }
2615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didEndEditing()
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didWriteSelectionToPasteboard()
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didSetSelectionTypesForPasteboard()
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
279635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid EditorClientWx::registerCommandForUndo(PassRefPtr<EditCommand> command)
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
281635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (frame) {
284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (webKitWin) {
286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->undoStack.append(EditCommandWx(command));
287635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid EditorClientWx::registerCommandForRedo(PassRefPtr<EditCommand> command)
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
293635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
294635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
295635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (frame) {
296231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
297635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (webKitWin) {
298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->redoStack.insert(0, EditCommandWx(command));
299635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
300635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::clearUndoRedoOperations()
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
305231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    Frame* frame = m_page->focusController()->focusedOrMainFrame();
306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (frame) {
308231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
309231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (webKitWin) {
310231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->redoStack.clear();
311231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->undoStack.clear();
312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        }
313231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
31681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool EditorClientWx::canCopyCut(bool defaultValue) const
31781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
31881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return defaultValue;
31981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
32081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
32181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool EditorClientWx::canPaste(bool defaultValue) const
32281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
32381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return defaultValue;
32481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
32581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::canUndo() const
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (frame) {
331231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
332231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (webKitWin) {
333231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return webKitWin->m_impl->undoStack.size() != 0;
334635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
335635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::canRedo() const
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
341635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
342635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
343635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (frame) {
344231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
345231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (webKitWin && webKitWin) {
346231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return webKitWin->m_impl->redoStack.size() != 0;
347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::undo()
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
354635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
355635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
356635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (frame) {
357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
358231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (webKitWin) {
359231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->undoStack.last().editCommand()->unapply();
360231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            webKitWin->m_impl->undoStack.removeLast();
361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
362635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::redo()
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
367635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Frame* frame = m_page->focusController()->focusedOrMainFrame();
368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
369231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (frame) {
370231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (webKitWin) {
3720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            webKitWin->m_impl->redoStack.last().editCommand()->reapply();
3730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            webKitWin->m_impl->redoStack.removeLast();
374635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
375635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool EditorClientWx::handleEditingKeyboardEvent(KeyboardEvent* event)
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Node* node = event->target()->toNode();
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(node);
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Frame* frame = node->document()->frame();
3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(frame);
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const PlatformKeyboardEvent* keyEvent = event->keyEvent();
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    //NB: this is what windows does, but they also have a keypress event for Alt+Enter which clearly won't get hit with this
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!keyEvent || keyEvent->altKey())  // do not treat this as text input if Alt is down
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return false;
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Editor::Command command = frame->editor()->command(interpretKeyEvent(event));
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (keyEvent->type() == PlatformKeyboardEvent::RawKeyDown) {
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // WebKit doesn't have enough information about mode to decide how commands that just insert text if executed via Editor should be treated,
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or if not to let a CHAR event be generated
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // (e.g. Tab that inserts a Tab character, or Enter).
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return !command.isTextInsertion() && command.execute(event);
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     if (command.execute(event))
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return true;
4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Don't insert null or control characters as they can result in unexpected behaviour
4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (event->charCode() < ' ')
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return false;
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return frame->editor()->insertText(event->keyEvent()->text(), event);
4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst char* EditorClientWx::interpretKeyEvent(const KeyboardEvent* evt)
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(evt->keyEvent()->type() == PlatformKeyboardEvent::RawKeyDown || evt->keyEvent()->type() == PlatformKeyboardEvent::Char);
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static HashMap<int, const char*>* keyDownCommandsMap = 0;
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static HashMap<int, const char*>* keyPressCommandsMap = 0;
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!keyDownCommandsMap) {
4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        keyDownCommandsMap = new HashMap<int, const char*>;
4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        keyPressCommandsMap = new HashMap<int, const char*>;
4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (unsigned i = 0; i < WXSIZEOF(keyDownEntries); i++)
4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            keyDownCommandsMap->set(keyDownEntries[i].modifiers << 16 | keyDownEntries[i].virtualKey, keyDownEntries[i].name);
4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (unsigned i = 0; i < WXSIZEOF(keyPressEntries); i++)
4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            keyPressCommandsMap->set(keyPressEntries[i].modifiers << 16 | keyPressEntries[i].charCode, keyPressEntries[i].name);
4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned modifiers = 0;
4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (evt->shiftKey())
4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        modifiers |= ShiftKey;
4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (evt->altKey())
4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        modifiers |= AltKey;
4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (evt->ctrlKey())
4340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        modifiers |= CtrlKey;
4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (evt->keyEvent()->type() == PlatformKeyboardEvent::RawKeyDown) {
4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int mapKey = modifiers << 16 | evt->keyCode();
4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return mapKey ? keyDownCommandsMap->get(mapKey) : 0;
4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int mapKey = modifiers << 16 | evt->charCode();
4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return mapKey ? keyPressCommandsMap->get(mapKey) : 0;
4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::handleInputMethodKeydown(KeyboardEvent* event)
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NOTE: we don't currently need to handle this. When key events occur,
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// both this method and handleKeyboardEvent get a chance at handling them.
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// We might use this method later on for IME-specific handling.
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::handleKeyboardEvent(KeyboardEvent* event)
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (handleEditingKeyboardEvent(event))
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        event->setDefaultHandled();
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textFieldDidBeginEditing(Element*)
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textFieldDidEndEditing(Element*)
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textDidChangeInTextField(Element*)
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::doTextFieldCommandFromEvent(Element*, KeyboardEvent*)
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textWillBeDeletedInTextField(Element*)
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textDidChangeInTextArea(Element*)
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::respondToChangedSelection()
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    Frame* frame = m_page->focusController()->focusedOrMainFrame();
4935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    if (frame) {
4945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
4955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        if (webKitWin) {
4965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            wxWebViewSelectionChangedEvent wkEvent(webKitWin);
4975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            webKitWin->GetEventHandler()->ProcessEvent(wkEvent);
4985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        }
4995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::ignoreWordInSpellDocument(const String&)
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::learnWord(const String&)
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength)
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength)
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::updateSpellingUIWithGrammarString(const String&, const GrammarDetail& detail)
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::updateSpellingUIWithMisspelledWord(const String&)
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::showSpellingUI(bool show)
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::spellingUIIsShowing()
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
543f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid EditorClientWx::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses)
544f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
545f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    notImplemented();
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochString EditorClientWx::getAutoCorrectSuggestionForMisspelledWord(const WTF::String&)
5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    notImplemented();
5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return String();
5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
554967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid EditorClientWx::willSetInputMethodState()
555967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
556967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    notImplemented();
557967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
558967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::setInputMethodState(bool enabled)
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
565