WebKitTools/DumpRenderTree/qt/TextInputControllerQt.cpp
changeset 2 303757a437d3
parent 0 4f2f89ce4247
equal deleted inserted replaced
0:4f2f89ce4247 2:303757a437d3
     1 /*
       
     2  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
       
     3  * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
       
     4  *
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions
       
     7  * are met:
       
     8  *
       
     9  * 1.  Redistributions of source code must retain the above copyright
       
    10  *     notice, this list of conditions and the following disclaimer.
       
    11  * 2.  Redistributions in binary form must reproduce the above copyright
       
    12  *     notice, this list of conditions and the following disclaimer in the
       
    13  *     documentation and/or other materials provided with the distribution.
       
    14  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
       
    15  *     its contributors may be used to endorse or promote products derived
       
    16  *     from this software without specific prior written permission.
       
    17  *
       
    18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
       
    19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       
    27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    28  */
       
    29 #include "config.h"
       
    30 #include "TextInputControllerQt.h"
       
    31 #include "../../../WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h"
       
    32 
       
    33 #include <QApplication>
       
    34 #include <QInputMethodEvent>
       
    35 #include <QKeyEvent>
       
    36 
       
    37 TextInputController::TextInputController(QWebPage* parent)
       
    38     : QObject(parent)
       
    39 {
       
    40 }
       
    41 
       
    42 void TextInputController::doCommand(const QString& command)
       
    43 {
       
    44     Qt::KeyboardModifiers modifiers = Qt::NoModifier;
       
    45     int keycode = 0;
       
    46     if (command == "moveBackwardAndModifySelection:") {
       
    47         modifiers |= Qt::ShiftModifier;
       
    48         keycode = Qt::Key_Left;
       
    49     } else if (command =="moveDown:") {
       
    50         keycode = Qt::Key_Down;
       
    51     } else if (command =="moveDownAndModifySelection:") {
       
    52         modifiers |= Qt::ShiftModifier;
       
    53         keycode = Qt::Key_Down;
       
    54     } else if (command =="moveForward:") {
       
    55         keycode = Qt::Key_Right;
       
    56     } else if (command =="moveForwardAndModifySelection:") {
       
    57         modifiers |= Qt::ShiftModifier;
       
    58         keycode = Qt::Key_Right;
       
    59     } else if (command =="moveLeft:") {
       
    60         keycode = Qt::Key_Left;
       
    61     } else if (command =="moveLeftAndModifySelection:") {
       
    62         modifiers |= Qt::ShiftModifier;
       
    63         keycode = Qt::Key_Left;
       
    64     } else if (command =="moveRight:") {
       
    65         keycode = Qt::Key_Right;
       
    66     } else if (command =="moveRightAndModifySelection:") {
       
    67         modifiers |= Qt::ShiftModifier;
       
    68         keycode = Qt::Key_Right;
       
    69     } else if (command =="moveToBeginningOfDocument:") {
       
    70         modifiers |= Qt::ControlModifier;
       
    71         keycode = Qt::Key_Home;
       
    72     } else if (command =="moveToBeginningOfLine:") {
       
    73         keycode = Qt::Key_Home;
       
    74 //     } else if (command =="moveToBeginningOfParagraph:") {
       
    75     } else if (command =="moveToEndOfDocument:") {
       
    76         modifiers |= Qt::ControlModifier;
       
    77         keycode = Qt::Key_End;
       
    78     } else if (command =="moveToEndOfLine:") {
       
    79         keycode = Qt::Key_End;
       
    80 //     } else if (command =="moveToEndOfParagraph:") {
       
    81     } else if (command =="moveUp:") {
       
    82         keycode = Qt::Key_Up;
       
    83     } else if (command =="moveUpAndModifySelection:") {
       
    84         modifiers |= Qt::ShiftModifier;
       
    85         keycode = Qt::Key_Up;
       
    86     } else if (command =="moveWordBackward:") {
       
    87         modifiers |= Qt::ControlModifier;
       
    88         keycode = Qt::Key_Up;
       
    89     } else if (command =="moveWordBackwardAndModifySelection:") {
       
    90         modifiers |= Qt::ShiftModifier;
       
    91         modifiers |= Qt::ControlModifier;
       
    92         keycode = Qt::Key_Left;
       
    93     } else if (command =="moveWordForward:") {
       
    94         modifiers |= Qt::ControlModifier;
       
    95         keycode = Qt::Key_Right;
       
    96     } else if (command =="moveWordForwardAndModifySelection:") {
       
    97         modifiers |= Qt::ControlModifier;
       
    98         modifiers |= Qt::ShiftModifier;
       
    99         keycode = Qt::Key_Right;
       
   100     } else if (command =="moveWordLeft:") {
       
   101         modifiers |= Qt::ControlModifier;
       
   102         keycode = Qt::Key_Left;
       
   103     } else if (command =="moveWordRight:") {
       
   104         modifiers |= Qt::ControlModifier;
       
   105         keycode = Qt::Key_Left;
       
   106     } else if (command =="moveWordRightAndModifySelection:") {
       
   107         modifiers |= Qt::ShiftModifier;
       
   108         modifiers |= Qt::ControlModifier;
       
   109         keycode = Qt::Key_Right;
       
   110     } else if (command =="moveWordLeftAndModifySelection:") {
       
   111         modifiers |= Qt::ShiftModifier;
       
   112         modifiers |= Qt::ControlModifier;
       
   113         keycode = Qt::Key_Left;
       
   114     } else if (command =="pageDown:") {
       
   115         keycode = Qt::Key_PageDown;
       
   116     } else if (command =="pageUp:") {
       
   117         keycode = Qt::Key_PageUp;
       
   118     } else if (command == "deleteWordBackward:") {
       
   119         modifiers |= Qt::ControlModifier;
       
   120         keycode = Qt::Key_Backspace;
       
   121     } else if (command == "deleteBackward:") {
       
   122         keycode = Qt::Key_Backspace;
       
   123     } else if (command == "deleteForward:") {
       
   124         keycode = Qt::Key_Delete;
       
   125     }
       
   126 
       
   127     QKeyEvent event(QEvent::KeyPress, keycode, modifiers);
       
   128     QApplication::sendEvent(parent(), &event);
       
   129     QKeyEvent event2(QEvent::KeyRelease, keycode, modifiers);
       
   130     QApplication::sendEvent(parent(), &event2);
       
   131 }
       
   132 
       
   133 void TextInputController::setMarkedText(const QString& string, int start, int end)
       
   134 {
       
   135     QList<QInputMethodEvent::Attribute> attributes;
       
   136 #if QT_VERSION >= 0x040600
       
   137     QInputMethodEvent::Attribute selection(QInputMethodEvent::Selection, start, end, QVariant());
       
   138     attributes << selection;
       
   139 #endif
       
   140     QInputMethodEvent event(string, attributes);
       
   141     QApplication::sendEvent(parent(), &event);
       
   142 }
       
   143 
       
   144 void TextInputController::insertText(const QString& string)
       
   145 {
       
   146     QList<QInputMethodEvent::Attribute> attributes;
       
   147     QInputMethodEvent event(string, attributes);
       
   148     event.setCommitString(string);
       
   149     QApplication::sendEvent(parent(), &event);
       
   150 }
       
   151 
       
   152 QVariantList TextInputController::selectedRange()
       
   153 {
       
   154     return DumpRenderTreeSupportQt::selectedRange(qobject_cast<QWebPage*>(parent()));
       
   155 }
       
   156 
       
   157 QVariantList TextInputController::firstRectForCharacterRange(int location, int length)
       
   158 {
       
   159     return DumpRenderTreeSupportQt::firstRectForCharacterRange(qobject_cast<QWebPage*>(parent()), location, length);
       
   160 }