src/hbwidgets/editors/hbselectioncontrol_p.cpp
author hgs
Mon, 18 Oct 2010 18:23:13 +0300
changeset 34 ed14f46c0e55
parent 7 923ff622b8b9
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/****************************************************************************
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
** All rights reserved.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
** Contact: Nokia Corporation (developer.feedback@nokia.com)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
** This file is part of the HbWidgets module of the UI Extensions for Mobile.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
** GNU Lesser General Public License Usage
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
** This file may be used under the terms of the GNU Lesser General Public
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
** License version 2.1 as published by the Free Software Foundation and
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
** appearing in the file LICENSE.LGPL included in the packaging of this file.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
** Please review the following information to ensure the GNU Lesser General
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
** Public License version 2.1 requirements will be met:
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
** In addition, as a special exception, Nokia gives you certain additional
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
** rights.  These rights are described in the Nokia Qt LGPL Exception
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
** If you have questions regarding the use of this file, please contact
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
** Nokia at developer.feedback@nokia.com.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
**
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
****************************************************************************/
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
//
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
//  W A R N I N G
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
//  -------------
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
//
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
// This file is not part of the Hb API.  It exists purely as an
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
// implementation detail.  This file may change from version to
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
// version without notice, or even be removed.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
//
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
// We mean it.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
//
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
#include "hbselectioncontrol_p.h"
2
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
    38
#include "hbstyleoption_p.h"
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
#include "hbeffect.h"
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
#include "hbdialog_p.h"
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
#include "hbabstractedit.h"
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
#include "hbabstractedit_p.h"
34
hgs
parents: 7
diff changeset
    43
#include "hblineedit.h"
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
#include "hbtoucharea.h"
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    45
#include "hbpangesture.h"
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    46
#include "hbtapgesture.h"
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    47
#include "hbevent.h"
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    48
#include "hbpopup.h"
34
hgs
parents: 7
diff changeset
    49
#include "hbmagnifier_p.h"
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    50
#include "hbnamespace_p.h"
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    51
#include "hbmainwindow.h"
34
hgs
parents: 7
diff changeset
    52
#include "hbdeviceprofile.h"
hgs
parents: 7
diff changeset
    53
#include "hbiconitem.h"
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
#include <QTextCursor>
34
hgs
parents: 7
diff changeset
    57
#include <QTextBlock>
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
#include <QGraphicsItem>
34
hgs
parents: 7
diff changeset
    59
#include <QGraphicsWidget>
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
#include <QAbstractTextDocumentLayout>
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
#include <QGraphicsSceneMouseEvent>
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
#include <QBasicTimer>
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
#include <QSizeF>
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
#include <QPointF>
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    65
#include <QHash>
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    66
#include <QGraphicsScene>
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    68
#include <hbwidgetfeedback.h>
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
34
hgs
parents: 7
diff changeset
    70
hgs
parents: 7
diff changeset
    71
#define HB_DEBUG_PAINT_INFO 0
hgs
parents: 7
diff changeset
    72
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    73
typedef QHash<HbMainWindow*,HbSelectionControl*> HbSelectionControlHash;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    74
Q_GLOBAL_STATIC(HbSelectionControlHash, globalSelectionControlHash)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    75
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
namespace {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
    static const int SNAP_DELAY = 300;
34
hgs
parents: 7
diff changeset
    78
    static const int MAGNIFIER_OPEN_DELAY = 200;
hgs
parents: 7
diff changeset
    79
    static const qreal MAGNIFIER_SCALE_FACTOR = 1.5;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
34
hgs
parents: 7
diff changeset
    82
class MyEditor: public HbAbstractEdit
hgs
parents: 7
diff changeset
    83
{
hgs
parents: 7
diff changeset
    84
public:
hgs
parents: 7
diff changeset
    85
    using HbAbstractEdit::drawContents;
hgs
parents: 7
diff changeset
    86
};
hgs
parents: 7
diff changeset
    87
hgs
parents: 7
diff changeset
    88
hgs
parents: 7
diff changeset
    89
class HbMagnifierDelegateEditor : public HbMagnifierDelegate
hgs
parents: 7
diff changeset
    90
{
hgs
parents: 7
diff changeset
    91
public:
hgs
parents: 7
diff changeset
    92
    HbMagnifierDelegateEditor(HbAbstractEdit * editor) {this->editor = editor;}
hgs
parents: 7
diff changeset
    93
    virtual void drawContents(QPainter *painter, const QStyleOptionGraphicsItem *option)
hgs
parents: 7
diff changeset
    94
    {
hgs
parents: 7
diff changeset
    95
        if (option && editor) {
hgs
parents: 7
diff changeset
    96
            static_cast<MyEditor*>(editor)->drawContents(painter,*option);
hgs
parents: 7
diff changeset
    97
        }
hgs
parents: 7
diff changeset
    98
    }
hgs
parents: 7
diff changeset
    99
    void setEditor(HbAbstractEdit * editor){this->editor = editor;}
hgs
parents: 7
diff changeset
   100
private:
hgs
parents: 7
diff changeset
   101
    HbAbstractEdit * editor;
hgs
parents: 7
diff changeset
   102
};
hgs
parents: 7
diff changeset
   103
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
class HbSelectionControlPrivate :public HbDialogPrivate
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
    Q_DECLARE_PUBLIC(HbSelectionControl)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   108
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
public:
34
hgs
parents: 7
diff changeset
   110
    enum InteractionMode {
hgs
parents: 7
diff changeset
   111
        Selection,
hgs
parents: 7
diff changeset
   112
        CursorPositioning
hgs
parents: 7
diff changeset
   113
    };
hgs
parents: 7
diff changeset
   114
hgs
parents: 7
diff changeset
   115
    enum HandleType {
hgs
parents: 7
diff changeset
   116
        DummyHandle,
hgs
parents: 7
diff changeset
   117
        SelectionStartHandle,
hgs
parents: 7
diff changeset
   118
        SelectionEndHandle
hgs
parents: 7
diff changeset
   119
    };
hgs
parents: 7
diff changeset
   120
hgs
parents: 7
diff changeset
   121
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   122
    HbSelectionControlPrivate();
34
hgs
parents: 7
diff changeset
   123
    ~HbSelectionControlPrivate();
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   124
    void init();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   125
    void createPrimitives();
34
hgs
parents: 7
diff changeset
   126
    void updateHandle(int cursorPos,
hgs
parents: 7
diff changeset
   127
                      int newHandlePos,
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
                      Qt::AlignmentFlag handleAlignment,
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   129
                      QGraphicsItem *handle,
34
hgs
parents: 7
diff changeset
   130
                      QGraphicsItem *handleTouchArea);
hgs
parents: 7
diff changeset
   131
    void updateMagnifier();
hgs
parents: 7
diff changeset
   132
    void initMagnifier();
hgs
parents: 7
diff changeset
   133
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   134
    QGraphicsItem * reparent(QGraphicsItem *item);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   135
    void reparent(QGraphicsItem *item, QGraphicsItem *newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   136
    void reparentHandles(QGraphicsItem *newParent);
34
hgs
parents: 7
diff changeset
   137
    QPointF constrainHitTestPoint(const QPointF& point);
hgs
parents: 7
diff changeset
   138
    HbSelectionControlPrivate::HandleType handleForPoint(const QPointF& point);
hgs
parents: 7
diff changeset
   139
    void gestureStarted(const QPointF &point);
hgs
parents: 7
diff changeset
   140
    void tapGestureStarted(HbTapGesture *gesture);
hgs
parents: 7
diff changeset
   141
    void tapGestureFinished();
hgs
parents: 7
diff changeset
   142
    void delayedTapFinished();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   143
    void panGestureStarted (HbPanGesture *gesture);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   144
    void panGestureUpdated (HbPanGesture *gesture);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   145
    void panGestureFinished (HbPanGesture *gesture);
34
hgs
parents: 7
diff changeset
   146
    void panGestureCanceled();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   147
    void show();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   148
    void _q_aboutToChangeView();
5
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   149
    void detachEditor(bool updateAtthachedEditorState);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
34
hgs
parents: 7
diff changeset
   151
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   152
    void updateDebugPaintInfo();
hgs
parents: 7
diff changeset
   153
#endif
hgs
parents: 7
diff changeset
   154
hgs
parents: 7
diff changeset
   155
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   156
public:
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   157
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   158
    HbAbstractEdit *mEdit;
34
hgs
parents: 7
diff changeset
   159
    HbMagnifierDelegateEditor *mMagnifierDelegate; // Owned by mMagnifier
hgs
parents: 7
diff changeset
   160
    HbMagnifier* mMagnifier;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
34
hgs
parents: 7
diff changeset
   162
    QGraphicsItem *mTopLevelAncestor;    
hgs
parents: 7
diff changeset
   163
    // The offset between the gesture start point and first hit test point
hgs
parents: 7
diff changeset
   164
    QPointF mTouchOffsetFromHitTestPoint;
hgs
parents: 7
diff changeset
   165
hgs
parents: 7
diff changeset
   166
    HbIconItem *mSelectionStartHandle;
hgs
parents: 7
diff changeset
   167
    HbIconItem *mSelectionEndHandle;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
    HbTouchArea* mSelectionStartTouchArea;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
    HbTouchArea* mSelectionEndTouchArea;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
34
hgs
parents: 7
diff changeset
   171
    InteractionMode mInteractionMode;
hgs
parents: 7
diff changeset
   172
    HandleType mPressed;
hgs
parents: 7
diff changeset
   173
    bool mScrollInProgress;
hgs
parents: 7
diff changeset
   174
    QPointF mHitTestPoint;                 // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   175
    QPointF mTouchPoint;                   // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   176
    QPointF mStartHandleHitTestPoint;      // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   177
    QPointF mEndHandleHitTestPoint;        // HbSelectionControl's coordinate system
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   178
    QBasicTimer mWordSnapTimer;
34
hgs
parents: 7
diff changeset
   179
    QBasicTimer mDelayedTapTimer;
hgs
parents: 7
diff changeset
   180
hgs
parents: 7
diff changeset
   181
    bool mMagnifierEnabled;
hgs
parents: 7
diff changeset
   182
    qreal mLastCursorHeight;
hgs
parents: 7
diff changeset
   183
    qreal mHandleMarginFromLine;
hgs
parents: 7
diff changeset
   184
    qreal mMagnifierMarginFromLine;
hgs
parents: 7
diff changeset
   185
    qreal mMagnifierLeftRightMarginFromHandle;
hgs
parents: 7
diff changeset
   186
    qreal mMagnifierMaxDescent;
hgs
parents: 7
diff changeset
   187
    qreal mVerticalScreenMargin;
hgs
parents: 7
diff changeset
   188
    qreal mTouchYOffsetFromMagnifierReferenceLine; // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   189
    qreal mStartHandleMagnifierReferenceLine;     // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   190
    qreal mEndHandleMagnifierReferenceLine;       // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   191
    qreal mMagnifierMaxYOffsetFromTouchPoint;
hgs
parents: 7
diff changeset
   192
    qreal mMagnifierMinYOffsetFromTouchPoint;
hgs
parents: 7
diff changeset
   193
    qreal mMaxHitTestPointOffsetYFromLine;
hgs
parents: 7
diff changeset
   194
    bool mIsPanActive;
hgs
parents: 7
diff changeset
   195
hgs
parents: 7
diff changeset
   196
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   197
    QRectF  mDocRectDebug;      // HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   198
#endif
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   199
};
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   200
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   201
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   202
HbSelectionControlPrivate::HbSelectionControlPrivate():
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   203
    mEdit(0),
34
hgs
parents: 7
diff changeset
   204
    mMagnifierDelegate(0),
hgs
parents: 7
diff changeset
   205
    mMagnifier(0),
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   206
    mTopLevelAncestor(0),
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   207
    mSelectionStartHandle(0),
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
    mSelectionEndHandle(0),
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   209
    mSelectionStartTouchArea(0),
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   210
    mSelectionEndTouchArea(0),
34
hgs
parents: 7
diff changeset
   211
    mInteractionMode(InteractionMode(0)),
hgs
parents: 7
diff changeset
   212
    mPressed(HandleType(0)),
hgs
parents: 7
diff changeset
   213
    mScrollInProgress(false),
hgs
parents: 7
diff changeset
   214
    mMagnifierEnabled(true),
hgs
parents: 7
diff changeset
   215
    mLastCursorHeight(0.0),
hgs
parents: 7
diff changeset
   216
    mHandleMarginFromLine(0.0),
hgs
parents: 7
diff changeset
   217
    mMagnifierMarginFromLine(0.0),
hgs
parents: 7
diff changeset
   218
    mMagnifierLeftRightMarginFromHandle(0.0),
hgs
parents: 7
diff changeset
   219
    mMagnifierMaxDescent(0.0),
hgs
parents: 7
diff changeset
   220
    mVerticalScreenMargin(0.0),
hgs
parents: 7
diff changeset
   221
    mTouchYOffsetFromMagnifierReferenceLine(0.0),
hgs
parents: 7
diff changeset
   222
    mStartHandleMagnifierReferenceLine(0.0),
hgs
parents: 7
diff changeset
   223
    mEndHandleMagnifierReferenceLine(0.0),
hgs
parents: 7
diff changeset
   224
    mMagnifierMaxYOffsetFromTouchPoint(0.0),
hgs
parents: 7
diff changeset
   225
    mMagnifierMinYOffsetFromTouchPoint(0.0),
hgs
parents: 7
diff changeset
   226
    mMaxHitTestPointOffsetYFromLine(0.0),
hgs
parents: 7
diff changeset
   227
    mIsPanActive(false)
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   228
{    
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   229
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   230
34
hgs
parents: 7
diff changeset
   231
HbSelectionControlPrivate::~HbSelectionControlPrivate()
hgs
parents: 7
diff changeset
   232
{
hgs
parents: 7
diff changeset
   233
}
hgs
parents: 7
diff changeset
   234
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   235
void HbSelectionControlPrivate::init()
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   236
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   237
    Q_Q(HbSelectionControl);
34
hgs
parents: 7
diff changeset
   238
hgs
parents: 7
diff changeset
   239
    // Set the size of the control to 0
hgs
parents: 7
diff changeset
   240
    q->resize(0,0);
hgs
parents: 7
diff changeset
   241
hgs
parents: 7
diff changeset
   242
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   243
    // Override 0 size to be able to paint paint
hgs
parents: 7
diff changeset
   244
    q->resize(1,1);
hgs
parents: 7
diff changeset
   245
#endif
hgs
parents: 7
diff changeset
   246
hgs
parents: 7
diff changeset
   247
    q->style()->parameter(QLatin1String("hb-param-margin-gene-middle-vertical"), mVerticalScreenMargin);
hgs
parents: 7
diff changeset
   248
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
    createPrimitives();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   250
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   251
    q->setVisible(false);
6
c3690ec91ef8 Revision: 201023
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 5
diff changeset
   252
    QGraphicsItem::GraphicsItemFlags itemFlags = q->flags();
7
923ff622b8b9 Revision: 201025
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 6
diff changeset
   253
#if QT_VERSION >= 0x040600
6
c3690ec91ef8 Revision: 201023
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 5
diff changeset
   254
    itemFlags |=  QGraphicsItem::ItemSendsGeometryChanges;
7
923ff622b8b9 Revision: 201025
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 6
diff changeset
   255
#endif
6
c3690ec91ef8 Revision: 201023
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 5
diff changeset
   256
    itemFlags &= ~QGraphicsItem::ItemIsFocusable;
c3690ec91ef8 Revision: 201023
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 5
diff changeset
   257
    itemFlags |=  QGraphicsItem::ItemIsPanel;
c3690ec91ef8 Revision: 201023
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 5
diff changeset
   258
    q->setFlags(itemFlags);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
    q->setFocusPolicy(Qt::NoFocus);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   260
    q->setActive(false);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   261
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
void HbSelectionControlPrivate::createPrimitives()
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   264
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
    Q_Q(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266
    if (!mSelectionStartHandle) {
34
hgs
parents: 7
diff changeset
   267
hgs
parents: 7
diff changeset
   268
        mSelectionStartHandle = new HbIconItem(q);
hgs
parents: 7
diff changeset
   269
        mSelectionStartHandle->setIconName(QLatin1String("qtg_graf_editor_handle_begin"));
hgs
parents: 7
diff changeset
   270
        HbStyle::setItemName(mSelectionStartHandle, QLatin1String("handle-icon"));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   271
        mSelectionStartHandle->setFlag(QGraphicsItem::ItemIsPanel);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   272
        mSelectionStartHandle->setFlag(QGraphicsItem::ItemIsFocusable,false);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   273
        mSelectionStartHandle->setActive(false);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
    if (!mSelectionEndHandle) {
34
hgs
parents: 7
diff changeset
   277
        mSelectionEndHandle = new HbIconItem(q);
hgs
parents: 7
diff changeset
   278
        mSelectionEndHandle->setIconName(QLatin1String("qtg_graf_editor_handle_end"));
hgs
parents: 7
diff changeset
   279
        HbStyle::setItemName(mSelectionEndHandle, QLatin1String("handle-icon"));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   280
        mSelectionEndHandle->setFlag(QGraphicsItem::ItemIsPanel);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   281
        mSelectionEndHandle->setFlag(QGraphicsItem::ItemIsFocusable,false);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   282
        mSelectionEndHandle->setActive(false);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
    if (!mSelectionStartTouchArea) {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
        mSelectionStartTouchArea = new HbTouchArea(q);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   287
        mSelectionStartTouchArea->setFlag(QGraphicsItem::ItemIsPanel);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   288
        mSelectionStartTouchArea->setFlag(QGraphicsItem::ItemIsFocusable,false);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   289
        mSelectionStartTouchArea->setActive(false);
34
hgs
parents: 7
diff changeset
   290
        HbStyle::setItemName(mSelectionStartTouchArea, QLatin1String("handle-toucharea"));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   291
        mSelectionStartTouchArea->grabGesture(Qt::TapGesture);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   292
        mSelectionStartTouchArea->grabGesture(Qt::PanGesture);
34
hgs
parents: 7
diff changeset
   293
        mSelectionStartTouchArea->installEventFilter(q);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   294
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
    if (!mSelectionEndTouchArea) {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
        mSelectionEndTouchArea = new HbTouchArea(q);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   298
        mSelectionEndTouchArea->setFlag(QGraphicsItem::ItemIsPanel);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   299
        mSelectionEndTouchArea->setFlag(QGraphicsItem::ItemIsFocusable,false);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   300
        mSelectionEndTouchArea->setActive(false);
34
hgs
parents: 7
diff changeset
   301
        HbStyle::setItemName(mSelectionEndTouchArea, QLatin1String("handle-toucharea"));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   302
        mSelectionEndTouchArea->grabGesture(Qt::TapGesture);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   303
        mSelectionEndTouchArea->grabGesture(Qt::PanGesture);
34
hgs
parents: 7
diff changeset
   304
        mSelectionEndTouchArea->installEventFilter(q);
hgs
parents: 7
diff changeset
   305
    }
hgs
parents: 7
diff changeset
   306
    if(!mMagnifier) {
hgs
parents: 7
diff changeset
   307
        mMagnifier = new HbMagnifier(q);
hgs
parents: 7
diff changeset
   308
        mMagnifier->setFlag(QGraphicsItem::ItemIsPanel);
hgs
parents: 7
diff changeset
   309
        mMagnifier->setFlag(QGraphicsItem::ItemIsFocusable,false);
hgs
parents: 7
diff changeset
   310
        mMagnifier->setActive(false);
hgs
parents: 7
diff changeset
   311
        HbStyle::setItemName(mMagnifier, QLatin1String("magnifier"));
hgs
parents: 7
diff changeset
   312
        mMagnifierDelegate = new HbMagnifierDelegateEditor(mEdit);
hgs
parents: 7
diff changeset
   313
        mMagnifier->setContentDelegate(mMagnifierDelegate);
hgs
parents: 7
diff changeset
   314
        mMagnifier->hide();
hgs
parents: 7
diff changeset
   315
        initMagnifier();
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   316
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   317
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   318
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
/*
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   320
   Updates given handle associated with handleTouchArea to place it
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   321
   newHandlePos in the selected text.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   322
*/
34
hgs
parents: 7
diff changeset
   323
void HbSelectionControlPrivate::updateHandle(
hgs
parents: 7
diff changeset
   324
                  int cursorPos,
hgs
parents: 7
diff changeset
   325
                  int newHandlePos,
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   326
                  Qt::AlignmentFlag handleAlignment,
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   327
                  QGraphicsItem *handle,
34
hgs
parents: 7
diff changeset
   328
                  QGraphicsItem *handleTouchArea)
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   329
{    
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   330
    Q_Q(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   331
34
hgs
parents: 7
diff changeset
   332
    QRectF rect = mEdit->rectForPosition(newHandlePos,(Qt::AlignTop||mInteractionMode == CursorPositioning)?
hgs
parents: 7
diff changeset
   333
                                                       QTextLine::Leading:QTextLine::Trailing);
hgs
parents: 7
diff changeset
   334
    qreal lineHeight = rect.height();
hgs
parents: 7
diff changeset
   335
hgs
parents: 7
diff changeset
   336
    if(cursorPos == newHandlePos) {
hgs
parents: 7
diff changeset
   337
        mLastCursorHeight = lineHeight;
hgs
parents: 7
diff changeset
   338
    }
hgs
parents: 7
diff changeset
   339
hgs
parents: 7
diff changeset
   340
    // Store the current hit test point for the given handle
hgs
parents: 7
diff changeset
   341
    // Convert rect to HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   342
    QRectF rectInSelectionControlCoord = q->mapRectFromItem(mEdit,rect);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   343
34
hgs
parents: 7
diff changeset
   344
    if (handleAlignment == Qt::AlignTop) {
hgs
parents: 7
diff changeset
   345
        mStartHandleHitTestPoint = rectInSelectionControlCoord.center();
hgs
parents: 7
diff changeset
   346
        mStartHandleHitTestPoint.setY(qMin(mStartHandleHitTestPoint.y(),
hgs
parents: 7
diff changeset
   347
                                           rectInSelectionControlCoord.top()+mMaxHitTestPointOffsetYFromLine));
hgs
parents: 7
diff changeset
   348
        mStartHandleMagnifierReferenceLine = rectInSelectionControlCoord.top();
hgs
parents: 7
diff changeset
   349
    } else {
hgs
parents: 7
diff changeset
   350
        mEndHandleHitTestPoint = rectInSelectionControlCoord.center();
hgs
parents: 7
diff changeset
   351
        mEndHandleHitTestPoint.setY(qMax(mEndHandleHitTestPoint.y(),
hgs
parents: 7
diff changeset
   352
                                         rectInSelectionControlCoord.bottom()-mMaxHitTestPointOffsetYFromLine));
hgs
parents: 7
diff changeset
   353
        mEndHandleMagnifierReferenceLine = rectInSelectionControlCoord.bottom();
hgs
parents: 7
diff changeset
   354
    }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   355
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   356
    // Convert rect to handle's parent coordinate system
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   357
    rect = handle->parentItem()->mapRectFromItem(mEdit,rect);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   358
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   359
    // Center handle around center point of rect
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   360
    QRectF boundingRect = handle->boundingRect();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   361
34
hgs
parents: 7
diff changeset
   362
    bool positionHandlesTouchEachOther = (boundingRect.height()*2 > lineHeight);
hgs
parents: 7
diff changeset
   363
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   364
    boundingRect.moveCenter(rect.center());
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   365
34
hgs
parents: 7
diff changeset
   366
    // Position handle either on top of rect using margin mHandleMarginFromLine or so that
hgs
parents: 7
diff changeset
   367
    // the two handles touch eachother
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   368
    if (handleAlignment == Qt::AlignTop) {
34
hgs
parents: 7
diff changeset
   369
        if (positionHandlesTouchEachOther) {
hgs
parents: 7
diff changeset
   370
            boundingRect.moveBottom(rect.center().y());
hgs
parents: 7
diff changeset
   371
        } else {
hgs
parents: 7
diff changeset
   372
            boundingRect.moveTop(rect.top()-mHandleMarginFromLine);
hgs
parents: 7
diff changeset
   373
        }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   374
    } else {
34
hgs
parents: 7
diff changeset
   375
        if (positionHandlesTouchEachOther) {
hgs
parents: 7
diff changeset
   376
            boundingRect.moveTop(rect.center().y());
hgs
parents: 7
diff changeset
   377
        } else {
hgs
parents: 7
diff changeset
   378
            boundingRect.moveBottom(rect.bottom()+mHandleMarginFromLine);
hgs
parents: 7
diff changeset
   379
        }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   380
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   381
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   382
    handle->setPos(boundingRect.topLeft());
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   383
34
hgs
parents: 7
diff changeset
   384
    // Position handle touch area around center-top of handle
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   385
    QPointF centerPos = boundingRect.center();
34
hgs
parents: 7
diff changeset
   386
    rect = boundingRect;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   387
    boundingRect = handleTouchArea->boundingRect();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   388
    boundingRect.moveCenter(centerPos);
34
hgs
parents: 7
diff changeset
   389
hgs
parents: 7
diff changeset
   390
    if (handleAlignment != Qt::AlignTop) {
hgs
parents: 7
diff changeset
   391
        boundingRect.moveTop(rect.top());
hgs
parents: 7
diff changeset
   392
    }
hgs
parents: 7
diff changeset
   393
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   394
    handleTouchArea->setPos(boundingRect.topLeft());
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   395
34
hgs
parents: 7
diff changeset
   396
    if (!mScrollInProgress) {
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   397
        QGraphicsItem * newParent = reparent(handle);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   398
        reparent(handleTouchArea, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   399
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   400
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   401
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   402
34
hgs
parents: 7
diff changeset
   403
void HbSelectionControlPrivate::updateMagnifier()
hgs
parents: 7
diff changeset
   404
{
hgs
parents: 7
diff changeset
   405
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   406
hgs
parents: 7
diff changeset
   407
    if (mMagnifier->isVisible()) {
hgs
parents: 7
diff changeset
   408
        QPointF canvasHitTestPos = q->mapToItem(HbAbstractEditPrivate::d_ptr(mEdit)->canvas,mHitTestPoint);
hgs
parents: 7
diff changeset
   409
        QRectF canvasCursorRect = HbAbstractEditPrivate::d_ptr(mEdit)->rectForPositionInCanvasCoords(mEdit->textCursor().position(),QTextLine::Leading);
hgs
parents: 7
diff changeset
   410
        QPointF centerOfMagnification = canvasCursorRect.center();
hgs
parents: 7
diff changeset
   411
        centerOfMagnification.setX(canvasHitTestPos.x());
hgs
parents: 7
diff changeset
   412
        canvasCursorRect.moveCenter(centerOfMagnification);
hgs
parents: 7
diff changeset
   413
hgs
parents: 7
diff changeset
   414
        // Set the visible content to be magnified
hgs
parents: 7
diff changeset
   415
        qreal magnifierHeight = mMagnifier->boundingRect().height();
hgs
parents: 7
diff changeset
   416
hgs
parents: 7
diff changeset
   417
        // Check if the line fits vertically to the magnifier if not align the bottom of the line with the bottom of the
hgs
parents: 7
diff changeset
   418
        // magnifier constraining a maximum line descent.
hgs
parents: 7
diff changeset
   419
        if (magnifierHeight < canvasCursorRect.height()*mMagnifier->contentScale()) {
hgs
parents: 7
diff changeset
   420
            const QTextCursor cursor = mEdit->textCursor();
hgs
parents: 7
diff changeset
   421
            const QTextBlock block = cursor.block();
hgs
parents: 7
diff changeset
   422
            const int positionInBlock = cursor.position() - block.position();
hgs
parents: 7
diff changeset
   423
            QTextLine line = block.layout()->lineForTextPosition(positionInBlock);
hgs
parents: 7
diff changeset
   424
            qreal lineDescent = line.descent();
hgs
parents: 7
diff changeset
   425
            qreal lineBottom  = canvasCursorRect.bottom();
hgs
parents: 7
diff changeset
   426
            if (mMagnifierMaxDescent < lineDescent) {
hgs
parents: 7
diff changeset
   427
                lineBottom-= lineDescent-mMagnifierMaxDescent;
hgs
parents: 7
diff changeset
   428
            }
hgs
parents: 7
diff changeset
   429
            // Compensate for rounding error by adding +1
hgs
parents: 7
diff changeset
   430
            centerOfMagnification.setY(lineBottom-magnifierHeight/(2*mMagnifier->contentScale())+1);
hgs
parents: 7
diff changeset
   431
        }
hgs
parents: 7
diff changeset
   432
hgs
parents: 7
diff changeset
   433
        mMagnifier->centerOnContent(centerOfMagnification);
hgs
parents: 7
diff changeset
   434
hgs
parents: 7
diff changeset
   435
        // -- Position magnifier --
hgs
parents: 7
diff changeset
   436
hgs
parents: 7
diff changeset
   437
        // Convert cursorRect to HbSelectionControl's coordinate system
hgs
parents: 7
diff changeset
   438
        QRectF rect = q->mapRectFromItem(HbAbstractEditPrivate::d_ptr(mEdit)->canvas,canvasCursorRect);
hgs
parents: 7
diff changeset
   439
hgs
parents: 7
diff changeset
   440
        QRectF boundingRect = mMagnifier->boundingRect();
hgs
parents: 7
diff changeset
   441
        boundingRect.moveCenter(rect.center());
hgs
parents: 7
diff changeset
   442
hgs
parents: 7
diff changeset
   443
        const qreal KMagnifierBottomUpperBound = rect.top()-mMagnifierMarginFromLine+mTouchYOffsetFromMagnifierReferenceLine;
hgs
parents: 7
diff changeset
   444
        const qreal KMagnifierBottomLowerBound = rect.bottom()-mMagnifierMarginFromLine+mTouchYOffsetFromMagnifierReferenceLine;
hgs
parents: 7
diff changeset
   445
hgs
parents: 7
diff changeset
   446
        qreal newMagnifierBottom = (mPressed == SelectionStartHandle?KMagnifierBottomUpperBound:KMagnifierBottomLowerBound);
hgs
parents: 7
diff changeset
   447
hgs
parents: 7
diff changeset
   448
        // -- Constrain vertical position --
hgs
parents: 7
diff changeset
   449
hgs
parents: 7
diff changeset
   450
        // Constrain maximum distance of bottom of the magnifier from touch point
hgs
parents: 7
diff changeset
   451
        newMagnifierBottom = qMax(newMagnifierBottom,mTouchPoint.y()-mMagnifierMaxYOffsetFromTouchPoint);
hgs
parents: 7
diff changeset
   452
hgs
parents: 7
diff changeset
   453
        // Constrain minimum distance of bottom of the magnifier from touch point
hgs
parents: 7
diff changeset
   454
        newMagnifierBottom = qMin(newMagnifierBottom,mTouchPoint.y()-mMagnifierMinYOffsetFromTouchPoint);
hgs
parents: 7
diff changeset
   455
hgs
parents: 7
diff changeset
   456
        // Constrain the bottom of the magnifier to be within the feasible bounds
hgs
parents: 7
diff changeset
   457
        newMagnifierBottom = qMin(qMax(newMagnifierBottom,KMagnifierBottomUpperBound),KMagnifierBottomLowerBound);
hgs
parents: 7
diff changeset
   458
hgs
parents: 7
diff changeset
   459
        boundingRect.moveBottom(newMagnifierBottom);
hgs
parents: 7
diff changeset
   460
        boundingRect.moveTop(qMax(mVerticalScreenMargin,boundingRect.top()));
hgs
parents: 7
diff changeset
   461
hgs
parents: 7
diff changeset
   462
        // Readjust magnifier position if there is not enough space at the top of the screen
hgs
parents: 7
diff changeset
   463
        if (mTouchPoint.y()-mMagnifierMinYOffsetFromTouchPoint < boundingRect.bottom()) {
hgs
parents: 7
diff changeset
   464
hgs
parents: 7
diff changeset
   465
            boundingRect.moveRight(mTouchPoint.x()-mMagnifierLeftRightMarginFromHandle);
hgs
parents: 7
diff changeset
   466
hgs
parents: 7
diff changeset
   467
            if(boundingRect.left() < 0) {
hgs
parents: 7
diff changeset
   468
                boundingRect.moveLeft(mTouchPoint.x()+mMagnifierLeftRightMarginFromHandle);
hgs
parents: 7
diff changeset
   469
            }
hgs
parents: 7
diff changeset
   470
        }
hgs
parents: 7
diff changeset
   471
        mMagnifier->setPos(boundingRect.topLeft());
hgs
parents: 7
diff changeset
   472
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   473
    updateDebugPaintInfo();
hgs
parents: 7
diff changeset
   474
#endif
hgs
parents: 7
diff changeset
   475
    }
hgs
parents: 7
diff changeset
   476
hgs
parents: 7
diff changeset
   477
}
hgs
parents: 7
diff changeset
   478
hgs
parents: 7
diff changeset
   479
void HbSelectionControlPrivate::initMagnifier()
hgs
parents: 7
diff changeset
   480
{   
hgs
parents: 7
diff changeset
   481
    mMagnifier->setContentScale(MAGNIFIER_SCALE_FACTOR);
hgs
parents: 7
diff changeset
   482
    mMagnifier->setZValue(100); 
hgs
parents: 7
diff changeset
   483
    mMagnifier->setMask(QLatin1String("qtg_fr_editor_magnifier_mask"));
hgs
parents: 7
diff changeset
   484
    mMagnifier->setOverlay(QLatin1String("qtg_fr_editor_magnifier_overlay"));
hgs
parents: 7
diff changeset
   485
    updateMagnifier();
hgs
parents: 7
diff changeset
   486
}
hgs
parents: 7
diff changeset
   487
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   488
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   489
/*
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   490
   Reparents item to q if item's bounding rect intersects mEdit's viewPort rectangle or otherwise to
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   491
   HbAbstractEditPrivate::d_ptr(d->mEdit)->canvas.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   492
   Returns new parent.
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   493
*/
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   494
QGraphicsItem * HbSelectionControlPrivate::reparent(QGraphicsItem *item)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   495
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   496
    Q_Q(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   497
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   498
    QGraphicsItem *newParent = HbAbstractEditPrivate::d_ptr(mEdit)->canvas;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   499
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   500
    // Convert bounding rect to mEdit's coordinate system
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   501
    QRectF rect = item->boundingRect();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   502
    rect = item->mapRectToItem(mEdit,rect);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   503
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   504
    QRectF scrollAreaRect = HbAbstractEditPrivate::d_ptr(mEdit)->scrollArea->geometry();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   505
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   506
    if (rect.intersects(scrollAreaRect)) {
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   507
        newParent = q;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   508
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   509
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   510
    reparent(item, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   511
    return newParent;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   512
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   513
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   514
void HbSelectionControlPrivate::reparent(QGraphicsItem *item, QGraphicsItem *newParent)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   515
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   516
    if (item && newParent && newParent != item->parentItem()) {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   517
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   518
        // Reparent handle items to newParent
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   519
        QPointF pos = newParent->mapFromItem(item->parentItem(),item->pos());
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   520
34
hgs
parents: 7
diff changeset
   521
        // ----------
hgs
parents: 7
diff changeset
   522
        // Workaround for Qt bug: Missing repaint when QGraphicsItem is reparented to another
hgs
parents: 7
diff changeset
   523
        // item with flag QGraphicsItem::ItemClipsChildrenToShape is set.
hgs
parents: 7
diff changeset
   524
        // ----------
hgs
parents: 7
diff changeset
   525
        // Remove when the bug is fixed
hgs
parents: 7
diff changeset
   526
        if(item->isWidget()) {
hgs
parents: 7
diff changeset
   527
            if (qobject_cast<HbIconItem *>(static_cast<QGraphicsWidget *>(item))) {
hgs
parents: 7
diff changeset
   528
                item->scene()->invalidate(item->sceneBoundingRect());
hgs
parents: 7
diff changeset
   529
            }
hgs
parents: 7
diff changeset
   530
        }
hgs
parents: 7
diff changeset
   531
        // ----------------------------------------------------------------------------------
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   532
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   533
        item->setParentItem(newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   534
        item->setPos(pos);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   535
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   536
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   537
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   538
void HbSelectionControlPrivate::reparentHandles(QGraphicsItem *newParent)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   539
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   540
    // Reparent handle items to newParent
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   541
    reparent(mSelectionStartHandle, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   542
    reparent(mSelectionStartTouchArea, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   543
    reparent(mSelectionEndHandle, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   544
    reparent(mSelectionEndTouchArea, newParent);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   545
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   546
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   547
34
hgs
parents: 7
diff changeset
   548
/*
hgs
parents: 7
diff changeset
   549
    Returns the constrained hit test point calculated from point.
hgs
parents: 7
diff changeset
   550
    point has to be in HbSelectionControl's coordinate system.
hgs
parents: 7
diff changeset
   551
    The returned pos is also in HbSelectionControl's coordinate system.
hgs
parents: 7
diff changeset
   552
*/
hgs
parents: 7
diff changeset
   553
QPointF HbSelectionControlPrivate::constrainHitTestPoint(const QPointF& point)
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   554
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   555
    Q_Q(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   556
34
hgs
parents: 7
diff changeset
   557
    QRectF docRect = QRectF(q->mapFromItem(HbAbstractEditPrivate::d_ptr(mEdit)->canvas->parentItem(),
hgs
parents: 7
diff changeset
   558
                            HbAbstractEditPrivate::d_ptr(mEdit)->canvas->pos()),
hgs
parents: 7
diff changeset
   559
                            HbAbstractEditPrivate::d_ptr(mEdit)->doc->size());
hgs
parents: 7
diff changeset
   560
hgs
parents: 7
diff changeset
   561
    // Constrain hitTestPos within docRect with mLastCursorHeight/2 top/bottom margins.
hgs
parents: 7
diff changeset
   562
    QPointF hitTestPos = QPointF(qMin(qMax(point.x(),docRect.left()),docRect.right()),
hgs
parents: 7
diff changeset
   563
                         qMin(qMax(point.y(),docRect.top()+mLastCursorHeight/2),docRect.bottom()-mLastCursorHeight/2));
hgs
parents: 7
diff changeset
   564
hgs
parents: 7
diff changeset
   565
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   566
    mDocRectDebug = docRect;
hgs
parents: 7
diff changeset
   567
#endif
hgs
parents: 7
diff changeset
   568
hgs
parents: 7
diff changeset
   569
    return hitTestPos;
hgs
parents: 7
diff changeset
   570
}
hgs
parents: 7
diff changeset
   571
hgs
parents: 7
diff changeset
   572
hgs
parents: 7
diff changeset
   573
/*
hgs
parents: 7
diff changeset
   574
    Returns the handle whose touch area contains point.
hgs
parents: 7
diff changeset
   575
    point has to be in HbSelectionControl's coordinate system.
hgs
parents: 7
diff changeset
   576
*/
hgs
parents: 7
diff changeset
   577
HbSelectionControlPrivate::HandleType HbSelectionControlPrivate::handleForPoint(const QPointF& point) {
hgs
parents: 7
diff changeset
   578
hgs
parents: 7
diff changeset
   579
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   580
hgs
parents: 7
diff changeset
   581
    HandleType pressed = DummyHandle;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   582
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   583
    // Find out which handle is being moved
34
hgs
parents: 7
diff changeset
   584
    if (mSelectionStartTouchArea->isVisible() &&
hgs
parents: 7
diff changeset
   585
        mSelectionStartTouchArea->contains(q->mapToItem(mSelectionStartTouchArea, point))) {
hgs
parents: 7
diff changeset
   586
        pressed = SelectionStartHandle;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   587
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   588
    if (mSelectionEndTouchArea->contains(q->mapToItem(mSelectionEndTouchArea, point))) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   589
        bool useArea = true;
34
hgs
parents: 7
diff changeset
   590
        if(pressed != DummyHandle) {
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   591
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   592
            // The press point was inside in both of the touch areas
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   593
            // choose the touch area whose center is closer to the press point
34
hgs
parents: 7
diff changeset
   594
            QRectF rect = mSelectionStartHandle->boundingRect();
hgs
parents: 7
diff changeset
   595
            rect.moveTopLeft(mSelectionStartHandle->pos());
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   596
            QLineF  lineEventPosSelStartCenter(point,rect.center());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   597
34
hgs
parents: 7
diff changeset
   598
            rect = mSelectionEndHandle->boundingRect();
hgs
parents: 7
diff changeset
   599
            rect.moveTopLeft(mSelectionEndHandle->pos());
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   600
            QLineF  lineEventPosSelEndCenter(point,rect.center());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   601
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   602
            if (lineEventPosSelStartCenter.length() < lineEventPosSelEndCenter.length()) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   603
                useArea = false;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   604
            }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   605
        }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   606
        if (useArea) {
34
hgs
parents: 7
diff changeset
   607
            pressed = SelectionEndHandle;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   608
        }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   609
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   610
34
hgs
parents: 7
diff changeset
   611
    return pressed;
hgs
parents: 7
diff changeset
   612
}
hgs
parents: 7
diff changeset
   613
hgs
parents: 7
diff changeset
   614
void HbSelectionControlPrivate::gestureStarted(const QPointF &point)
hgs
parents: 7
diff changeset
   615
{
hgs
parents: 7
diff changeset
   616
    mPressed = handleForPoint(point);
hgs
parents: 7
diff changeset
   617
    mTouchPoint = point;
hgs
parents: 7
diff changeset
   618
hgs
parents: 7
diff changeset
   619
    if (mPressed == DummyHandle) {
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   620
        // Hit is outside touch areas, ignore
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   621
        return;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   622
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   623
34
hgs
parents: 7
diff changeset
   624
    // Calculate touch offsets
hgs
parents: 7
diff changeset
   625
    mHitTestPoint = mStartHandleHitTestPoint;
hgs
parents: 7
diff changeset
   626
    qreal magnifierReferenceLine = mStartHandleMagnifierReferenceLine;
hgs
parents: 7
diff changeset
   627
    if (mPressed == SelectionEndHandle) {
hgs
parents: 7
diff changeset
   628
        mHitTestPoint = mEndHandleHitTestPoint;
hgs
parents: 7
diff changeset
   629
        magnifierReferenceLine = mEndHandleMagnifierReferenceLine;
hgs
parents: 7
diff changeset
   630
    }
hgs
parents: 7
diff changeset
   631
hgs
parents: 7
diff changeset
   632
    mTouchYOffsetFromMagnifierReferenceLine = point.y() - magnifierReferenceLine;
hgs
parents: 7
diff changeset
   633
    mTouchOffsetFromHitTestPoint = mHitTestPoint - point;
hgs
parents: 7
diff changeset
   634
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   635
    // Position cursor at the pressed selection handle
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   636
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   637
    QTextCursor cursor = mEdit->textCursor();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   638
    int selStartPos = qMin(mEdit->textCursor().anchor(),mEdit->textCursor().position());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   639
    int selEndPos = qMax(mEdit->textCursor().anchor(),mEdit->textCursor().position());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   640
34
hgs
parents: 7
diff changeset
   641
    if (mPressed == SelectionStartHandle) {
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   642
        cursor.setPosition(selEndPos);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   643
        cursor.setPosition(selStartPos, QTextCursor::KeepAnchor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   644
    } else {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   645
        cursor.setPosition(selStartPos);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   646
        cursor.setPosition(selEndPos, QTextCursor::KeepAnchor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   647
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   648
    mEdit->setTextCursor(cursor);
34
hgs
parents: 7
diff changeset
   649
}
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   650
34
hgs
parents: 7
diff changeset
   651
void HbSelectionControlPrivate::tapGestureStarted(HbTapGesture *gesture)
hgs
parents: 7
diff changeset
   652
{
hgs
parents: 7
diff changeset
   653
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   654
hgs
parents: 7
diff changeset
   655
    mMagnifier->hideWithEffect();
hgs
parents: 7
diff changeset
   656
    if (!mDelayedTapTimer.isActive()) {
hgs
parents: 7
diff changeset
   657
        mDelayedTapTimer.start(MAGNIFIER_OPEN_DELAY,q);
hgs
parents: 7
diff changeset
   658
    }
hgs
parents: 7
diff changeset
   659
    QPointF point = q->mapFromScene(gesture->sceneStartPos());
hgs
parents: 7
diff changeset
   660
    gestureStarted(point);
hgs
parents: 7
diff changeset
   661
}
hgs
parents: 7
diff changeset
   662
hgs
parents: 7
diff changeset
   663
void HbSelectionControlPrivate::tapGestureFinished()
hgs
parents: 7
diff changeset
   664
{
hgs
parents: 7
diff changeset
   665
    mDelayedTapTimer.stop();
hgs
parents: 7
diff changeset
   666
    if (!mIsPanActive) {
hgs
parents: 7
diff changeset
   667
        mSelectionStartTouchArea->show();
hgs
parents: 7
diff changeset
   668
        mSelectionStartHandle->show();
hgs
parents: 7
diff changeset
   669
        mMagnifier->hideWithEffect();
hgs
parents: 7
diff changeset
   670
    }
hgs
parents: 7
diff changeset
   671
}
hgs
parents: 7
diff changeset
   672
hgs
parents: 7
diff changeset
   673
void HbSelectionControlPrivate::delayedTapFinished()
hgs
parents: 7
diff changeset
   674
{
hgs
parents: 7
diff changeset
   675
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   676
hgs
parents: 7
diff changeset
   677
    // Reset gesture override to have enable more responsive pan
hgs
parents: 7
diff changeset
   678
    q->scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant());
hgs
parents: 7
diff changeset
   679
hgs
parents: 7
diff changeset
   680
    if (mPressed == HbSelectionControlPrivate::SelectionEndHandle && mInteractionMode == HbSelectionControlPrivate::CursorPositioning) {
hgs
parents: 7
diff changeset
   681
        mSelectionStartTouchArea->hide();
hgs
parents: 7
diff changeset
   682
        mSelectionStartHandle->hide();
hgs
parents: 7
diff changeset
   683
    }
hgs
parents: 7
diff changeset
   684
    if (mMagnifierEnabled) {
hgs
parents: 7
diff changeset
   685
        mMagnifier->showWithEffect();
hgs
parents: 7
diff changeset
   686
        q->updatePrimitives();
hgs
parents: 7
diff changeset
   687
    }
hgs
parents: 7
diff changeset
   688
}
hgs
parents: 7
diff changeset
   689
hgs
parents: 7
diff changeset
   690
hgs
parents: 7
diff changeset
   691
hgs
parents: 7
diff changeset
   692
void HbSelectionControlPrivate::panGestureStarted(HbPanGesture *gesture)
hgs
parents: 7
diff changeset
   693
{
hgs
parents: 7
diff changeset
   694
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   695
hgs
parents: 7
diff changeset
   696
    mIsPanActive = true;
hgs
parents: 7
diff changeset
   697
    QPointF point = q->mapFromScene(gesture->sceneStartPos());
hgs
parents: 7
diff changeset
   698
    gestureStarted(point);
hgs
parents: 7
diff changeset
   699
    if (mPressed == SelectionEndHandle && mInteractionMode == HbSelectionControlPrivate::CursorPositioning) {
hgs
parents: 7
diff changeset
   700
        mSelectionStartTouchArea->hide();
hgs
parents: 7
diff changeset
   701
        mSelectionStartHandle->hide();
hgs
parents: 7
diff changeset
   702
    }
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   703
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   704
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   705
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   706
void HbSelectionControlPrivate::panGestureFinished(HbPanGesture *gesture)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   707
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   708
    Q_Q(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   709
    Q_UNUSED(gesture)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   710
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   711
    if (mWordSnapTimer.isActive()) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   712
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   713
        // Snap selection to word beginning or end
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   714
        QTextCursor cursor = mEdit->textCursor();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   715
        int curPos = mEdit->textCursor().position();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   716
        int anchPos = mEdit->textCursor().anchor();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   717
        cursor.select(QTextCursor::WordUnderCursor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   718
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   719
        // Snap direction depends on cursor position
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   720
        curPos = ((curPos > anchPos)?cursor.position():cursor.anchor());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   721
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   722
        cursor.setPosition(anchPos);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   723
        cursor.setPosition(curPos, QTextCursor::KeepAnchor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   724
        mEdit->setTextCursor(cursor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   725
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   726
34
hgs
parents: 7
diff changeset
   727
    mSelectionStartTouchArea->show();
hgs
parents: 7
diff changeset
   728
    mSelectionStartHandle->show();
hgs
parents: 7
diff changeset
   729
    // This has to be set before updatePrimitives call
hgs
parents: 7
diff changeset
   730
    mIsPanActive = false;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   731
    q->updatePrimitives();
34
hgs
parents: 7
diff changeset
   732
    mMagnifier->hideWithEffect();
hgs
parents: 7
diff changeset
   733
hgs
parents: 7
diff changeset
   734
    // This has to be set at last
hgs
parents: 7
diff changeset
   735
    mPressed = DummyHandle;
hgs
parents: 7
diff changeset
   736
}
hgs
parents: 7
diff changeset
   737
hgs
parents: 7
diff changeset
   738
void HbSelectionControlPrivate::panGestureCanceled()
hgs
parents: 7
diff changeset
   739
{
hgs
parents: 7
diff changeset
   740
    mMagnifier->hideWithEffect();
hgs
parents: 7
diff changeset
   741
    mIsPanActive = false;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   742
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   743
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   744
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   745
void HbSelectionControlPrivate::panGestureUpdated(HbPanGesture *gesture)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   746
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   747
    Q_Q(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   748
34
hgs
parents: 7
diff changeset
   749
    // Calculate new hittest point
hgs
parents: 7
diff changeset
   750
    QPointF point = q->mapFromScene(gesture->sceneStartPos() + gesture->sceneOffset());
hgs
parents: 7
diff changeset
   751
    mTouchPoint = point;
hgs
parents: 7
diff changeset
   752
    mHitTestPoint = (point + mTouchOffsetFromHitTestPoint);
hgs
parents: 7
diff changeset
   753
    mHitTestPoint = constrainHitTestPoint(mHitTestPoint);
2
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
   754
34
hgs
parents: 7
diff changeset
   755
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   756
    updateDebugPaintInfo();
hgs
parents: 7
diff changeset
   757
#endif
2
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
   758
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
   759
    QTextCursor cursor;
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
   760
    cursor = mEdit->textCursor();
06ff229162e9 Revision: 201017
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 1
diff changeset
   761
34
hgs
parents: 7
diff changeset
   762
    // Hit test for the center of current selection touch area
hgs
parents: 7
diff changeset
   763
    int hitPos = HbAbstractEditPrivate::d_ptr(mEdit)->hitTest(q->mapToItem(mEdit,mHitTestPoint),Qt::FuzzyHit);
hgs
parents: 7
diff changeset
   764
hgs
parents: 7
diff changeset
   765
    // if no valid hit pos or empty selection in read-only mode return
hgs
parents: 7
diff changeset
   766
    if (hitPos == -1 || (mEdit->isReadOnly() && hitPos == cursor.anchor() && mInteractionMode == Selection)) {
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   767
        return;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   768
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   769
34
hgs
parents: 7
diff changeset
   770
    bool isCursorMoved = false;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   771
    if (hitPos != cursor.position()) {
34
hgs
parents: 7
diff changeset
   772
        isCursorMoved = true;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   773
    }
34
hgs
parents: 7
diff changeset
   774
hgs
parents: 7
diff changeset
   775
    cursor.setPosition(hitPos, ((mInteractionMode==Selection||mPressed == SelectionStartHandle)
hgs
parents: 7
diff changeset
   776
                               ?QTextCursor::KeepAnchor:QTextCursor::MoveAnchor));
hgs
parents: 7
diff changeset
   777
hgs
parents: 7
diff changeset
   778
    if (isCursorMoved) {
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   779
        if (mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   780
            HbWidgetFeedback::triggered(mEdit, Hb::InstantDraggedOver);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   781
        }
34
hgs
parents: 7
diff changeset
   782
        if (mInteractionMode==Selection) {
hgs
parents: 7
diff changeset
   783
            // Restart timer every time when a selection handle moved
hgs
parents: 7
diff changeset
   784
            mWordSnapTimer.start(SNAP_DELAY, q);
hgs
parents: 7
diff changeset
   785
        }
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   786
        mEdit->setTextCursor(cursor);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   787
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   788
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   789
    // Ensure that the hitPos is visible
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   790
    HbAbstractEditPrivate::d_ptr(mEdit)->ensurePositionVisible(hitPos);
34
hgs
parents: 7
diff changeset
   791
    if (mMagnifierEnabled) {
hgs
parents: 7
diff changeset
   792
        mMagnifier->showWithEffect();
hgs
parents: 7
diff changeset
   793
    }
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   794
    q->updatePrimitives();
34
hgs
parents: 7
diff changeset
   795
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   796
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   797
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   798
void HbSelectionControlPrivate::show() {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   799
    Q_Q(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   800
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   801
    // Set the z-value of the selection control above its top-level ancestor
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   802
    if (mTopLevelAncestor) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   803
        qreal zValue = mTopLevelAncestor->zValue() + HbPrivate::SelectionControlHandlesValueUnit;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   804
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   805
        q->setZValue(zValue);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   806
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   807
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   808
    if (q->scene() != mEdit->scene() && mEdit->scene()) {
34
hgs
parents: 7
diff changeset
   809
        mEdit->scene()->addItem(q);    
hgs
parents: 7
diff changeset
   810
    }    
hgs
parents: 7
diff changeset
   811
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   812
    q->show();    
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   813
    q->updatePrimitives();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   814
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   815
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   816
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   817
void HbSelectionControlPrivate::_q_aboutToChangeView()
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   818
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   819
    Q_Q(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   820
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   821
    if (mEdit && q->isVisible()) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   822
        mEdit->deselect();
34
hgs
parents: 7
diff changeset
   823
        q->hideHandles();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   824
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   825
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   826
5
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   827
void HbSelectionControlPrivate::detachEditor(bool updateAtthachedEditorState)
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   828
{
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   829
    Q_Q(HbSelectionControl);
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   830
    if (mEdit) {
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   831
        q->hideHandles();
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   832
        reparentHandles(q);
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   833
        if (updateAtthachedEditorState) {
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   834
            mEdit->disconnect(q);
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   835
            mEdit->d_func()->selectionControl = 0;
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   836
            mEdit->deselect();
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   837
        }
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   838
        mEdit = 0;
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   839
        mTopLevelAncestor = 0;
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   840
    }
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   841
}
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   842
34
hgs
parents: 7
diff changeset
   843
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
   844
void HbSelectionControlPrivate::updateDebugPaintInfo()
hgs
parents: 7
diff changeset
   845
{
hgs
parents: 7
diff changeset
   846
    Q_Q(HbSelectionControl);
hgs
parents: 7
diff changeset
   847
    mEdit->update();
hgs
parents: 7
diff changeset
   848
    q->update();
hgs
parents: 7
diff changeset
   849
}
hgs
parents: 7
diff changeset
   850
#endif
hgs
parents: 7
diff changeset
   851
hgs
parents: 7
diff changeset
   852
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   853
HbSelectionControl::HbSelectionControl() : HbWidget(*new HbSelectionControlPrivate(),0)
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   854
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   855
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   856
    Q_D(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   857
    d->q_ptr = this;
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   858
    d->init();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   859
    //TODO: selection control could be singleton per main window
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   860
    //      since only one selection control is used at a time
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   861
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   862
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   863
HbSelectionControl* HbSelectionControl::attachEditor(HbAbstractEdit *edit)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   864
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   865
    if(!edit || !edit->mainWindow()) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   866
        qWarning("HbSelectionControl: attempting to attach to null editor pointer!");
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   867
    }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   868
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   869
    HbSelectionControl *control = globalSelectionControlHash()->value(edit->mainWindow());
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   870
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   871
    if (!control) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   872
        control = new HbSelectionControl();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   873
        globalSelectionControlHash()->insert(edit->mainWindow(),control);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   874
        QObject::connect(edit->mainWindow(), SIGNAL(aboutToChangeView(HbView *, HbView *)), control, SLOT(_q_aboutToChangeView()));
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   875
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   876
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   877
    HbSelectionControlPrivate *d = control->d_func();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   878
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   879
    if (edit != d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   880
        control->detachEditor();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   881
        d->mEdit = edit;        
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   882
        QObject::connect(d->mEdit, SIGNAL(cursorPositionChanged(int, int)), control, SLOT(updatePrimitives()));
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   883
        QObject::connect(d->mEdit, SIGNAL(contentsChanged()), control, SLOT(updatePrimitives()));
34
hgs
parents: 7
diff changeset
   884
        d->mMagnifierDelegate->setEditor(d->mEdit);
hgs
parents: 7
diff changeset
   885
hgs
parents: 7
diff changeset
   886
hgs
parents: 7
diff changeset
   887
        // Set the background of magnifier to the background of HbLineEdit or HbTextEdit
hgs
parents: 7
diff changeset
   888
        QLatin1String magnifierBackground("qtg_fr_lineedit_normal_c");
hgs
parents: 7
diff changeset
   889
        if (!qobject_cast<HbLineEdit*>(d->mEdit)) {
hgs
parents: 7
diff changeset
   890
            magnifierBackground = QLatin1String("qtg_fr_textedit_normal_c");
hgs
parents: 7
diff changeset
   891
hgs
parents: 7
diff changeset
   892
        }
hgs
parents: 7
diff changeset
   893
        d->mMagnifier->setBackground(magnifierBackground);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   894
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   895
        // find first top-level ancestor of d->mEdit
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   896
        for(d->mTopLevelAncestor = d->mEdit;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   897
            d->mTopLevelAncestor->parentItem();
34
hgs
parents: 7
diff changeset
   898
            d->mTopLevelAncestor = d->mTopLevelAncestor->parentItem()){
hgs
parents: 7
diff changeset
   899
hgs
parents: 7
diff changeset
   900
            // Workaround for Qt bug: QTBUG-13473
hgs
parents: 7
diff changeset
   901
            // This line could be removed after Qt fixes this bug.
hgs
parents: 7
diff changeset
   902
            d->mTopLevelAncestor->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
hgs
parents: 7
diff changeset
   903
hgs
parents: 7
diff changeset
   904
        };
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   905
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   906
    return control;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   907
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   908
34
hgs
parents: 7
diff changeset
   909
void HbSelectionControl::detachEditor(HbAbstractEdit *edit)
hgs
parents: 7
diff changeset
   910
{
hgs
parents: 7
diff changeset
   911
    if(!edit || !edit->mainWindow()) {
hgs
parents: 7
diff changeset
   912
        qWarning("HbSelectionControl: attempting to detach to null editor pointer!");
hgs
parents: 7
diff changeset
   913
    }
hgs
parents: 7
diff changeset
   914
hgs
parents: 7
diff changeset
   915
    HbSelectionControl *control = globalSelectionControlHash()->value(edit->mainWindow());
hgs
parents: 7
diff changeset
   916
    if (control) {
hgs
parents: 7
diff changeset
   917
        control->detachEditor();
hgs
parents: 7
diff changeset
   918
    }
hgs
parents: 7
diff changeset
   919
}
hgs
parents: 7
diff changeset
   920
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   921
void HbSelectionControl::detachEditor()
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   922
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   923
    Q_D(HbSelectionControl);
34
hgs
parents: 7
diff changeset
   924
    d->mMagnifierDelegate->setEditor(0);
5
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   925
    d->detachEditor(true);
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   926
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   927
5
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   928
void HbSelectionControl::detachEditorFromDestructor()
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   929
{
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   930
    Q_D(HbSelectionControl);
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   931
    d->detachEditor(false);
627c4a0fd0e7 Revision: 201021
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 2
diff changeset
   932
}
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   933
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   934
void HbSelectionControl::hideHandles()
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   935
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   936
    Q_D(HbSelectionControl);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   937
    if (isVisible() && d->mEdit) {
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   938
        hide();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   939
        d->reparentHandles(this);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   940
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   941
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   942
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   943
void HbSelectionControl::showHandles()
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   944
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   945
    Q_D(HbSelectionControl);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   946
    if (!isVisible() && d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   947
        d->show();
34
hgs
parents: 7
diff changeset
   948
    }    
hgs
parents: 7
diff changeset
   949
    // selection start handles might be hidden
hgs
parents: 7
diff changeset
   950
    d->mSelectionStartTouchArea->show();
hgs
parents: 7
diff changeset
   951
    d->mSelectionStartHandle->show();
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   952
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   953
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   954
void HbSelectionControl::scrollStarted()
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   955
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   956
    Q_D(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   957
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   958
    if (isVisible() && d->mEdit) {
34
hgs
parents: 7
diff changeset
   959
        d->mScrollInProgress = true;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   960
        // Reparent handle items to editor canvas on pan start
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   961
        d->reparentHandles(HbAbstractEditPrivate::d_ptr(d->mEdit)->canvas);
34
hgs
parents: 7
diff changeset
   962
        d->mMagnifier->hideWithEffect();
hgs
parents: 7
diff changeset
   963
        // Note: This call is not needed if it is guaranteed that this method
hgs
parents: 7
diff changeset
   964
        // will be called before the scrolling started.
hgs
parents: 7
diff changeset
   965
        updatePrimitives();
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   966
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   967
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   968
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   969
void HbSelectionControl::scrollFinished()
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   970
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   971
    Q_D(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   972
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   973
    if (isVisible() && d->mEdit) {
34
hgs
parents: 7
diff changeset
   974
        d->mScrollInProgress = false;
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   975
        updatePrimitives();
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   976
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   977
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   978
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   979
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   980
void HbSelectionControl::timerEvent(QTimerEvent *event)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   981
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   982
    Q_D(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   983
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   984
    if (event->timerId() == d->mWordSnapTimer.timerId()) {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   985
        d->mWordSnapTimer.stop();
34
hgs
parents: 7
diff changeset
   986
    } else  if (event->timerId() == d->mDelayedTapTimer.timerId()) {
hgs
parents: 7
diff changeset
   987
        d->mDelayedTapTimer.stop();
hgs
parents: 7
diff changeset
   988
        d->delayedTapFinished();
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   989
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   990
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   991
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   992
void HbSelectionControl::polish( HbStyleParameters& params )
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   993
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   994
    Q_D(HbSelectionControl);
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   995
34
hgs
parents: 7
diff changeset
   996
    if (isVisible()) {
hgs
parents: 7
diff changeset
   997
hgs
parents: 7
diff changeset
   998
        const QLatin1String KHandleMarginFromLine("handle-margin-from-line");
hgs
parents: 7
diff changeset
   999
        const QLatin1String KMagnifierMarginFromLine("magnifier-margin-from-line");
hgs
parents: 7
diff changeset
  1000
        const QLatin1String KMagnifierLeftRightMarginFromHandle("magnifier-left-right-margin-from-handle");
hgs
parents: 7
diff changeset
  1001
        const QLatin1String KMagnifierMaxDescent("magnifier-max-descent");
hgs
parents: 7
diff changeset
  1002
hgs
parents: 7
diff changeset
  1003
        params.addParameter(KHandleMarginFromLine);
hgs
parents: 7
diff changeset
  1004
        params.addParameter(KMagnifierMarginFromLine);
hgs
parents: 7
diff changeset
  1005
        params.addParameter(KMagnifierLeftRightMarginFromHandle);
hgs
parents: 7
diff changeset
  1006
        params.addParameter(KMagnifierMaxDescent);
hgs
parents: 7
diff changeset
  1007
hgs
parents: 7
diff changeset
  1008
        HbWidget::polish(params);
hgs
parents: 7
diff changeset
  1009
hgs
parents: 7
diff changeset
  1010
        // Set size of handles
hgs
parents: 7
diff changeset
  1011
        QSizeF size = d->mSelectionStartHandle->preferredSize();
hgs
parents: 7
diff changeset
  1012
        d->mSelectionStartHandle->setSize(size);
hgs
parents: 7
diff changeset
  1013
        d->mSelectionEndHandle->setSize(size);
hgs
parents: 7
diff changeset
  1014
hgs
parents: 7
diff changeset
  1015
        // Set max y offset for hit test point
hgs
parents: 7
diff changeset
  1016
        // TODO: consider setting this value from css
hgs
parents: 7
diff changeset
  1017
        d->mMaxHitTestPointOffsetYFromLine = size.height();
hgs
parents: 7
diff changeset
  1018
hgs
parents: 7
diff changeset
  1019
        // Set size of touch areas
hgs
parents: 7
diff changeset
  1020
        size = d->mSelectionEndTouchArea->preferredSize();
hgs
parents: 7
diff changeset
  1021
        d->mSelectionEndTouchArea->resize(size);
hgs
parents: 7
diff changeset
  1022
hgs
parents: 7
diff changeset
  1023
hgs
parents: 7
diff changeset
  1024
        // Increase the height of the touch area of the start selection handle
hgs
parents: 7
diff changeset
  1025
        size.setHeight(size.height()*2-d->mSelectionStartHandle->size().height());
hgs
parents: 7
diff changeset
  1026
        d->mSelectionStartTouchArea->resize(size);
hgs
parents: 7
diff changeset
  1027
hgs
parents: 7
diff changeset
  1028
hgs
parents: 7
diff changeset
  1029
hgs
parents: 7
diff changeset
  1030
        // Set size of magnifier
hgs
parents: 7
diff changeset
  1031
        d->mMagnifier->resize(d->mMagnifier->preferredSize());
hgs
parents: 7
diff changeset
  1032
hgs
parents: 7
diff changeset
  1033
        if (params.value(KHandleMarginFromLine).isValid()) {
hgs
parents: 7
diff changeset
  1034
            d->mHandleMarginFromLine = params.value(KHandleMarginFromLine).toReal();
hgs
parents: 7
diff changeset
  1035
        }
hgs
parents: 7
diff changeset
  1036
hgs
parents: 7
diff changeset
  1037
        if (params.value(KMagnifierMarginFromLine).isValid()) {
hgs
parents: 7
diff changeset
  1038
            d->mMagnifierMarginFromLine = params.value(KMagnifierMarginFromLine).toReal();
hgs
parents: 7
diff changeset
  1039
        }
hgs
parents: 7
diff changeset
  1040
        if (params.value(KMagnifierLeftRightMarginFromHandle).isValid()) {
hgs
parents: 7
diff changeset
  1041
            d->mMagnifierLeftRightMarginFromHandle = params.value(KMagnifierLeftRightMarginFromHandle).toReal();
hgs
parents: 7
diff changeset
  1042
        }
hgs
parents: 7
diff changeset
  1043
hgs
parents: 7
diff changeset
  1044
        if (params.value(KMagnifierMaxDescent).isValid()) {
hgs
parents: 7
diff changeset
  1045
            d->mMagnifierMaxDescent = params.value(KMagnifierMaxDescent).toReal();
hgs
parents: 7
diff changeset
  1046
        }
hgs
parents: 7
diff changeset
  1047
hgs
parents: 7
diff changeset
  1048
        // Set the min/max magnifier touch offsets
hgs
parents: 7
diff changeset
  1049
        // TODO: consider setting this value from css
hgs
parents: 7
diff changeset
  1050
        d->mMagnifierMaxYOffsetFromTouchPoint = d->mMagnifierMarginFromLine*2;
hgs
parents: 7
diff changeset
  1051
        d->mMagnifierMinYOffsetFromTouchPoint = d->mMagnifierMarginFromLine/2;
hgs
parents: 7
diff changeset
  1052
hgs
parents: 7
diff changeset
  1053
        updatePrimitives();
hgs
parents: 7
diff changeset
  1054
    } else {
hgs
parents: 7
diff changeset
  1055
        HbWidget::polish(params);
hgs
parents: 7
diff changeset
  1056
    }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1057
}
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1058
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1059
QVariant HbSelectionControl::itemChange(GraphicsItemChange change, const QVariant &value)
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1060
{
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1061
    if (change == QGraphicsItem::ItemPositionChange) {
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1062
        return qVariantFromValue(QPointF(0,0));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1063
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1064
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1065
    return HbWidget::itemChange(change, value);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1066
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1067
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1068
void HbSelectionControl::gestureEvent(QGestureEvent* event) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1069
    Q_D(HbSelectionControl);
34
hgs
parents: 7
diff changeset
  1070
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1071
    if(HbTapGesture *tap = qobject_cast<HbTapGesture*>(event->gesture(Qt::TapGesture))) {
34
hgs
parents: 7
diff changeset
  1072
        if (d->mEdit) {
hgs
parents: 7
diff changeset
  1073
            // GestureFinshed is only delegated while the mDelayedTapTimer is active
hgs
parents: 7
diff changeset
  1074
            if (tap->state() != Qt::GestureFinished || d->mDelayedTapTimer.isActive()) {
hgs
parents: 7
diff changeset
  1075
                HbAbstractEditPrivate::d_ptr(d->mEdit)->gestureEvent(event,this);
hgs
parents: 7
diff changeset
  1076
            }
hgs
parents: 7
diff changeset
  1077
        }
hgs
parents: 7
diff changeset
  1078
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1079
        switch(tap->state()) {
34
hgs
parents: 7
diff changeset
  1080
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1081
        case Qt::GestureStarted:
34
hgs
parents: 7
diff changeset
  1082
            d->tapGestureStarted(tap);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1083
            break;
34
hgs
parents: 7
diff changeset
  1084
        case Qt::GestureCanceled:
hgs
parents: 7
diff changeset
  1085
        case Qt::GestureFinished:
hgs
parents: 7
diff changeset
  1086
            d->tapGestureFinished();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1087
            break;
34
hgs
parents: 7
diff changeset
  1088
        default:
hgs
parents: 7
diff changeset
  1089
              break;
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1090
        }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1091
    }
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1092
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1093
    if(HbPanGesture *pan = qobject_cast<HbPanGesture*>(event->gesture(Qt::PanGesture))) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1094
        switch(pan->state()) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1095
        case Qt::GestureStarted:
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1096
            if (d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1097
                d->panGestureStarted(pan);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1098
            }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1099
            break;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1100
        case Qt::GestureUpdated:
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1101
            if (d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1102
                d->panGestureUpdated(pan);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1103
            }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1104
            break;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1105
        case Qt::GestureFinished:
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1106
            if (d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1107
                d->panGestureFinished(pan);
7
923ff622b8b9 Revision: 201025
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 6
diff changeset
  1108
                HbWidgetFeedback::triggered(this, Hb::InstantReleased);
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1109
            }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1110
            break;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1111
      case Qt::GestureCanceled:
34
hgs
parents: 7
diff changeset
  1112
            if (d->mEdit) {
hgs
parents: 7
diff changeset
  1113
                d->panGestureCanceled();
hgs
parents: 7
diff changeset
  1114
                HbWidgetFeedback::triggered(d->mEdit, Hb::InstantReleased);
hgs
parents: 7
diff changeset
  1115
            }
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1116
            break;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1117
      default:
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1118
            break;
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1119
        }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1120
    }
0
16d8024aca5e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1121
}
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1122
34
hgs
parents: 7
diff changeset
  1123
bool HbSelectionControl::eventFilter(QObject * watched, QEvent *event)
hgs
parents: 7
diff changeset
  1124
{
hgs
parents: 7
diff changeset
  1125
    Q_UNUSED(watched)
hgs
parents: 7
diff changeset
  1126
hgs
parents: 7
diff changeset
  1127
    // Filter gesture events and delegate to gestureEvent()
hgs
parents: 7
diff changeset
  1128
    if (event->type() == QEvent::Gesture || event->type() == QEvent::GestureOverride) {
hgs
parents: 7
diff changeset
  1129
        gestureEvent(static_cast<QGestureEvent*>(event));
hgs
parents: 7
diff changeset
  1130
        return true;
hgs
parents: 7
diff changeset
  1131
    }
hgs
parents: 7
diff changeset
  1132
    return false;
hgs
parents: 7
diff changeset
  1133
}
hgs
parents: 7
diff changeset
  1134
hgs
parents: 7
diff changeset
  1135
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1136
bool HbSelectionControl::event(QEvent *event)
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1137
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1138
    Q_D(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1139
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1140
    if (event->type() == HbEvent::DeviceProfileChanged && d->mEdit) {
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1141
        HbDeviceProfileChangedEvent* dpEvent = static_cast<HbDeviceProfileChangedEvent*>(event);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1142
        if ( dpEvent->profile().alternateProfileName() == dpEvent->oldProfile().name() ) {
34
hgs
parents: 7
diff changeset
  1143
            d->initMagnifier();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1144
            updatePrimitives();
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1145
        }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1146
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1147
    return HbWidget::event(event);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1148
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1149
34
hgs
parents: 7
diff changeset
  1150
hgs
parents: 7
diff changeset
  1151
void HbSelectionControl::setMagnifierEnabled(bool enable)
hgs
parents: 7
diff changeset
  1152
{
hgs
parents: 7
diff changeset
  1153
    Q_D(HbSelectionControl);
hgs
parents: 7
diff changeset
  1154
    d->mMagnifierEnabled = enable;
hgs
parents: 7
diff changeset
  1155
}
hgs
parents: 7
diff changeset
  1156
hgs
parents: 7
diff changeset
  1157
bool HbSelectionControl::isMagnifierEnabled() const
hgs
parents: 7
diff changeset
  1158
{
hgs
parents: 7
diff changeset
  1159
    Q_D(const HbSelectionControl);
hgs
parents: 7
diff changeset
  1160
    return d->mMagnifierEnabled;
hgs
parents: 7
diff changeset
  1161
}
hgs
parents: 7
diff changeset
  1162
hgs
parents: 7
diff changeset
  1163
void HbSelectionControl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
hgs
parents: 7
diff changeset
  1164
{
hgs
parents: 7
diff changeset
  1165
    Q_UNUSED(widget)
hgs
parents: 7
diff changeset
  1166
    Q_UNUSED(option)    
hgs
parents: 7
diff changeset
  1167
    Q_UNUSED(painter)
hgs
parents: 7
diff changeset
  1168
hgs
parents: 7
diff changeset
  1169
#if HB_DEBUG_PAINT_INFO
hgs
parents: 7
diff changeset
  1170
    Q_D(HbSelectionControl);
hgs
parents: 7
diff changeset
  1171
    painter->save();
hgs
parents: 7
diff changeset
  1172
hgs
parents: 7
diff changeset
  1173
    // draw mHitTestPoint
hgs
parents: 7
diff changeset
  1174
    painter->setPen(Qt::yellow);
hgs
parents: 7
diff changeset
  1175
    painter->setBrush(Qt::yellow);
hgs
parents: 7
diff changeset
  1176
    painter->drawEllipse(d->mHitTestPoint, 3,3);
hgs
parents: 7
diff changeset
  1177
hgs
parents: 7
diff changeset
  1178
    // draw mDocRectDebug
hgs
parents: 7
diff changeset
  1179
    painter->setBrush(Qt::NoBrush);
hgs
parents: 7
diff changeset
  1180
    painter->drawRect(d->mDocRectDebug);
hgs
parents: 7
diff changeset
  1181
hgs
parents: 7
diff changeset
  1182
    // draw line representing mMagnifierMaxYOffsetFromTouchPoint
hgs
parents: 7
diff changeset
  1183
    painter->setPen(Qt::red);
hgs
parents: 7
diff changeset
  1184
    qreal magnifierMaxYOffsetLine = d->mTouchPoint.y()-d->mMagnifierMaxYOffsetFromTouchPoint;
hgs
parents: 7
diff changeset
  1185
    painter->drawLine(QPointF(0,magnifierMaxYOffsetLine),QPointF(500,magnifierMaxYOffsetLine));
hgs
parents: 7
diff changeset
  1186
hgs
parents: 7
diff changeset
  1187
    // draw line representing mMagnifierMinYOffsetFromTouchPoint
hgs
parents: 7
diff changeset
  1188
    painter->setPen(Qt::green);
hgs
parents: 7
diff changeset
  1189
    qreal magnifierMinYOffsetLine = d->mTouchPoint.y()-d->mMagnifierMinYOffsetFromTouchPoint;
hgs
parents: 7
diff changeset
  1190
    painter->drawLine(QPointF(0,magnifierMinYOffsetLine),QPointF(500,magnifierMinYOffsetLine));
hgs
parents: 7
diff changeset
  1191
hgs
parents: 7
diff changeset
  1192
    // draw line representing magnifierStartYOffsetLine
hgs
parents: 7
diff changeset
  1193
    painter->setPen(Qt::black);
hgs
parents: 7
diff changeset
  1194
    qreal magnifierStartYOffsetLine = d->mStartHandleMagnifierReferenceLine - d->mMagnifierMarginFromLine;
hgs
parents: 7
diff changeset
  1195
    painter->drawLine(QPointF(0,magnifierStartYOffsetLine),QPointF(500,magnifierStartYOffsetLine));
hgs
parents: 7
diff changeset
  1196
hgs
parents: 7
diff changeset
  1197
    // draw line representing magnifierStartYOffsetLine
hgs
parents: 7
diff changeset
  1198
    painter->setPen(Qt::magenta);
hgs
parents: 7
diff changeset
  1199
    qreal magnifierEndYOffsetLine = d->mEndHandleMagnifierReferenceLine - d->mMagnifierMarginFromLine;
hgs
parents: 7
diff changeset
  1200
    painter->drawLine(QPointF(0,magnifierEndYOffsetLine),QPointF(500,magnifierEndYOffsetLine));
hgs
parents: 7
diff changeset
  1201
hgs
parents: 7
diff changeset
  1202
hgs
parents: 7
diff changeset
  1203
    painter->drawRect(boundingRect());
hgs
parents: 7
diff changeset
  1204
hgs
parents: 7
diff changeset
  1205
    painter->restore();
hgs
parents: 7
diff changeset
  1206
#endif
hgs
parents: 7
diff changeset
  1207
hgs
parents: 7
diff changeset
  1208
}
hgs
parents: 7
diff changeset
  1209
hgs
parents: 7
diff changeset
  1210
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1211
void HbSelectionControl::updatePrimitives()
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1212
{
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1213
    Q_D(HbSelectionControl);
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1214
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1215
    if (isVisible() && d->polished && d->mEdit) {
34
hgs
parents: 7
diff changeset
  1216
hgs
parents: 7
diff changeset
  1217
        const bool hasSelection = d->mEdit->textCursor().hasSelection();
hgs
parents: 7
diff changeset
  1218
hgs
parents: 7
diff changeset
  1219
        // The interaction mode can be change only when there is no pan in progress
hgs
parents: 7
diff changeset
  1220
        if (!d->mIsPanActive) {
hgs
parents: 7
diff changeset
  1221
            d->mInteractionMode = (hasSelection?HbSelectionControlPrivate::Selection:
hgs
parents: 7
diff changeset
  1222
                                                HbSelectionControlPrivate::CursorPositioning);
hgs
parents: 7
diff changeset
  1223
        }
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1224
34
hgs
parents: 7
diff changeset
  1225
        const int cursorPos = d->mEdit->textCursor().position();
hgs
parents: 7
diff changeset
  1226
        int selStartPos = cursorPos;
hgs
parents: 7
diff changeset
  1227
        int selEndPos = cursorPos;
hgs
parents: 7
diff changeset
  1228
        d->mSelectionEndHandle->setIconName(QLatin1String("qtg_graf_editor_handle_finetune"));
hgs
parents: 7
diff changeset
  1229
hgs
parents: 7
diff changeset
  1230
        if (hasSelection) {
hgs
parents: 7
diff changeset
  1231
            selStartPos = qMin(d->mEdit->textCursor().anchor(),cursorPos);
hgs
parents: 7
diff changeset
  1232
            selEndPos = qMax(d->mEdit->textCursor().anchor(),cursorPos);
hgs
parents: 7
diff changeset
  1233
            d->mSelectionEndHandle->setIconName(QLatin1String("qtg_graf_editor_handle_end"));
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1234
        }
34
hgs
parents: 7
diff changeset
  1235
hgs
parents: 7
diff changeset
  1236
        d->updateHandle(cursorPos,selStartPos,Qt::AlignTop,d->mSelectionStartHandle,d->mSelectionStartTouchArea);
hgs
parents: 7
diff changeset
  1237
        d->updateHandle(cursorPos,selEndPos,Qt::AlignBottom,d->mSelectionEndHandle,d->mSelectionEndTouchArea);
hgs
parents: 7
diff changeset
  1238
        d->updateMagnifier();
1
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1239
    }
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1240
}
f7ac710697a9 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
  1241
#include "moc_hbselectioncontrol_p.cpp"
34
hgs
parents: 7
diff changeset
  1242