ginebra2/EditorWidget.h
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 *
hgs
parents:
diff changeset
     5
 * This program is free software: you can redistribute it and/or modify
hgs
parents:
diff changeset
     6
 * it under the terms of the GNU Lesser General Public License as published by
hgs
parents:
diff changeset
     7
 * the Free Software Foundation, version 2.1 of the License.
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
hgs
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents:
diff changeset
    12
 * GNU Lesser General Public License for more details.
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * You should have received a copy of the GNU Lesser General Public License
hgs
parents:
diff changeset
    15
 * along with this program.  If not,
hgs
parents:
diff changeset
    16
 * see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
hgs
parents:
diff changeset
    17
 *
hgs
parents:
diff changeset
    18
 * Description:
hgs
parents:
diff changeset
    19
 *
hgs
parents:
diff changeset
    20
 */
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#ifndef __EDITOR_WIDGET_H__
hgs
parents:
diff changeset
    23
#define __EDITOR_WIDGET_H__
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "ActionButton.h"
hgs
parents:
diff changeset
    26
#include "NativeChromeItem.h"
12
hgs
parents: 9
diff changeset
    27
#include "TitleItem.h"
3
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <QGraphicsTextItem>
hgs
parents:
diff changeset
    30
#include <QGraphicsWidget>
hgs
parents:
diff changeset
    31
#include <QtGui>
hgs
parents:
diff changeset
    32
16
hgs
parents: 12
diff changeset
    33
class QStm_Gesture;
3
hgs
parents:
diff changeset
    34
namespace GVA {
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
  class ChromeSnippet;
hgs
parents:
diff changeset
    37
  class ChromeWidget;
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
  class GTextLineItem : public QGraphicsTextItem
hgs
parents:
diff changeset
    40
  {
hgs
parents:
diff changeset
    41
    Q_OBJECT
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
  public:
hgs
parents:
diff changeset
    44
    GTextLineItem(QGraphicsItem * parent);
hgs
parents:
diff changeset
    45
    virtual ~GTextLineItem();
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    qreal cursorX();
hgs
parents:
diff changeset
    48
    qreal anchorX();
hgs
parents:
diff changeset
    49
    QRectF selectionRectF();
hgs
parents:
diff changeset
    50
    void setText(const QString & text);
hgs
parents:
diff changeset
    51
    void setMaxTextLength(int length);
hgs
parents:
diff changeset
    52
    void selectAll();
hgs
parents:
diff changeset
    53
    void unselect();
hgs
parents:
diff changeset
    54
    qreal textWidth();
hgs
parents:
diff changeset
    55
    void setCursorPosition(int pos);
16
hgs
parents: 12
diff changeset
    56
    bool event(QEvent* event);
3
hgs
parents:
diff changeset
    57
    bool hasSelection() { return (cursorX()!= anchorX()); }
hgs
parents:
diff changeset
    58
    Qt::InputMethodHints inputMethodHints() const { return m_hints; }
hgs
parents:
diff changeset
    59
    void setInputMethodHints(Qt::InputMethodHints hints);
9
hgs
parents: 3
diff changeset
    60
    void setSpecificButton(QString& commitString, QString& buttonIconPath);
12
hgs
parents: 9
diff changeset
    61
    void launchVKB();
16
hgs
parents: 12
diff changeset
    62
    void sendInputPanelEvent(QEvent::Type type);
hgs
parents: 12
diff changeset
    63
    void cut();
hgs
parents: 12
diff changeset
    64
    void copy();
hgs
parents: 12
diff changeset
    65
    void paste();
hgs
parents: 12
diff changeset
    66
    void setContextMenuStatus(bool on) { m_isContextMenuOn = on; }
hgs
parents: 12
diff changeset
    67
    bool contextMenuOn() { return m_isContextMenuOn; }
hgs
parents: 12
diff changeset
    68
    bool eventFilter(QObject* o, QEvent* e);
3
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
  protected:
hgs
parents:
diff changeset
    71
    virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
hgs
parents:
diff changeset
    72
    virtual void keyPressEvent(QKeyEvent * event);
hgs
parents:
diff changeset
    73
    virtual void keyReleaseEvent(QKeyEvent * event);
hgs
parents:
diff changeset
    74
    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
hgs
parents:
diff changeset
    75
    virtual void mousePressEvent(QGraphicsSceneMouseEvent * event);
hgs
parents:
diff changeset
    76
    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);
hgs
parents:
diff changeset
    77
    virtual void focusInEvent(QFocusEvent * event);
hgs
parents:
diff changeset
    78
    virtual void focusOutEvent(QFocusEvent * event);
hgs
parents:
diff changeset
    79
    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
16
hgs
parents: 12
diff changeset
    80
    bool handleQStmGesture(QStm_Gesture* gesture);
3
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
  private slots:
hgs
parents:
diff changeset
    83
    void contentsChange(int position, int charsRemoved, int charsAdded);
9
hgs
parents: 3
diff changeset
    84
    void specificBtnTriggered(bool checked);
3
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
  signals:
hgs
parents:
diff changeset
    87
    void cursorXChanged(qreal newx);
hgs
parents:
diff changeset
    88
    void textMayChanged();
hgs
parents:
diff changeset
    89
    void focusChanged(bool focusIn);
hgs
parents:
diff changeset
    90
    void tapped(QPointF& pos);
16
hgs
parents: 12
diff changeset
    91
    void contextEvent(bool isContentSelected);
3
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
  private:
hgs
parents:
diff changeset
    94
    QTextLine m_textLine;
hgs
parents:
diff changeset
    95
    int m_defaultStartDragDistance;
hgs
parents:
diff changeset
    96
    int m_maxTextLength;
hgs
parents:
diff changeset
    97
    Qt::InputMethodHints m_hints;
9
hgs
parents: 3
diff changeset
    98
    bool m_setSpecificBtn;
hgs
parents: 3
diff changeset
    99
    QString m_spBtnCommitString;
hgs
parents: 3
diff changeset
   100
    QString m_spBtnIconPath;
16
hgs
parents: 12
diff changeset
   101
    bool m_isContextMenuOn; // don't unselect text or change cursor position when context menu is showing
3
hgs
parents:
diff changeset
   102
  };
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
  class GLineEditor : public QGraphicsWidget
hgs
parents:
diff changeset
   105
  {
hgs
parents:
diff changeset
   106
    Q_OBJECT
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
  public:
hgs
parents:
diff changeset
   109
    GLineEditor(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent = 0);
hgs
parents:
diff changeset
   110
    virtual ~GLineEditor();
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    void selectAll() { m_editor->selectAll(); }
hgs
parents:
diff changeset
   113
    void unselect() { m_editor->unselect(); }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    void setTextColor(QColor & color);
12
hgs
parents: 9
diff changeset
   116
	
3
hgs
parents:
diff changeset
   117
    void setBackgroundColor(QColor & color) {m_backgroundColor = color;}
hgs
parents:
diff changeset
   118
    void setPadding(qreal padding);
hgs
parents:
diff changeset
   119
    void setRightTextMargin(qreal margin);
hgs
parents:
diff changeset
   120
    QString text() const;
hgs
parents:
diff changeset
   121
    void updateEditor();
hgs
parents:
diff changeset
   122
    bool tappedOnText(qreal x) const;
hgs
parents:
diff changeset
   123
    void grabFocus() { m_editor->setFocus(); }
12
hgs
parents: 9
diff changeset
   124
    void removeFocus() {m_editor->clearFocus(); }
3
hgs
parents:
diff changeset
   125
    void setCursorPosition (int pos) { m_editor->setCursorPosition(pos); }
hgs
parents:
diff changeset
   126
    void shiftToLeftEnd() { setCursorPosition(0); }
hgs
parents:
diff changeset
   127
    int characterCount() { return m_editor->document()->characterCount(); }
hgs
parents:
diff changeset
   128
    bool hasSelection() { return m_editor->hasSelection(); }
hgs
parents:
diff changeset
   129
    Qt::InputMethodHints inputMethodHints() { return m_editor->inputMethodHints(); }
hgs
parents:
diff changeset
   130
    // Calling this function will overwrite the existing hints
hgs
parents:
diff changeset
   131
    void setInputMethodHints(Qt::InputMethodHints hints) { m_editor->setInputMethodHints(hints); }
12
hgs
parents: 9
diff changeset
   132
    void setMaxTextLength(int length) { m_editor->setMaxTextLength(length);}
16
hgs
parents: 12
diff changeset
   133
    void setContextMenuStatus(bool on) { m_editor->setContextMenuStatus(on); }
hgs
parents: 12
diff changeset
   134
    void setFocusForEditor() { m_editor->setFocus(); }
12
hgs
parents: 9
diff changeset
   135
#ifdef BROWSER_LAYOUT_TENONE
hgs
parents: 9
diff changeset
   136
    void changeEditorMode(bool edit);
hgs
parents: 9
diff changeset
   137
    void setTitle(const QString & text);
hgs
parents: 9
diff changeset
   138
    void setTitleColor(QColor & color);
hgs
parents: 9
diff changeset
   139
    void setTitleFont(QFont & font);
16
hgs
parents: 12
diff changeset
   140
    void setTextFont(QFont & font);
12
hgs
parents: 9
diff changeset
   141
#endif
9
hgs
parents: 3
diff changeset
   142
    void setSpecificButton(QString commitString, QString buttonIcon) { m_editor->setSpecificButton(commitString, buttonIcon);}
12
hgs
parents: 9
diff changeset
   143
    void closeVKB();
hgs
parents: 9
diff changeset
   144
    void openVKB();
16
hgs
parents: 12
diff changeset
   145
    void cut() { m_editor->cut();}
hgs
parents: 12
diff changeset
   146
    void copy() { m_editor->copy(); }
hgs
parents: 12
diff changeset
   147
    void paste() { m_editor->paste(); }
3
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
  protected:
hgs
parents:
diff changeset
   150
    virtual bool eventFilter(QObject * object, QEvent * event);
hgs
parents:
diff changeset
   151
    virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
hgs
parents:
diff changeset
   152
    virtual void resizeEvent(QGraphicsSceneResizeEvent * event);
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
  signals:
hgs
parents:
diff changeset
   155
    void activated();
hgs
parents:
diff changeset
   156
    void textMayChanged();
12
hgs
parents: 9
diff changeset
   157
    void contentsChange(int position, int charsRemoved, int charsAdded);
3
hgs
parents:
diff changeset
   158
    void focusChanged(bool focusIn);
hgs
parents:
diff changeset
   159
    void tapped(QPointF& pos);
12
hgs
parents: 9
diff changeset
   160
    void titleMouseEvent(QPointF& pos);
16
hgs
parents: 12
diff changeset
   161
    void contextEvent(bool isContentSelected);
3
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
  private slots:
hgs
parents:
diff changeset
   164
    void makeVisible(qreal cursorX);
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
  public slots:
hgs
parents:
diff changeset
   167
    void setText(const QString & text);
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
  private:
hgs
parents:
diff changeset
   170
    void internalScroll(qreal deltaX);
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
  protected:
hgs
parents:
diff changeset
   173
    ChromeWidget * m_chrome;
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    // Cached values used for painting and scrolling.
hgs
parents:
diff changeset
   176
    qreal m_viewPortWidth;
12
hgs
parents: 9
diff changeset
   177
#ifdef BROWSER_LAYOUT_TENONE
hgs
parents: 9
diff changeset
   178
    qreal m_titleModeWidth;
hgs
parents: 9
diff changeset
   179
    GTitleItem * m_title;
hgs
parents: 9
diff changeset
   180
    QColor m_titleColor;
hgs
parents: 9
diff changeset
   181
#endif
3
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    // At runtime, UrlSearchSnippet is parent to a QGraphicsWidget
hgs
parents:
diff changeset
   184
    // (m_viewPort) that is parent to a UrlEditorWidget (m_editor).
hgs
parents:
diff changeset
   185
    QGraphicsWidget * m_viewPort;
hgs
parents:
diff changeset
   186
    GTextLineItem * m_editor;
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    // Attributes
hgs
parents:
diff changeset
   189
    QString m_text;
hgs
parents:
diff changeset
   190
    QColor m_textColor;
12
hgs
parents: 9
diff changeset
   191
3
hgs
parents:
diff changeset
   192
    QColor m_backgroundColor;
hgs
parents:
diff changeset
   193
    qreal m_padding;
hgs
parents:
diff changeset
   194
    //TODO: add left margin too
hgs
parents:
diff changeset
   195
    qreal m_rightTextMargin;
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
  };
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
  class GTextEditor : public GLineEditor
hgs
parents:
diff changeset
   200
  {
hgs
parents:
diff changeset
   201
    Q_OBJECT
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
  public:
hgs
parents:
diff changeset
   204
    GTextEditor(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent = 0);
hgs
parents:
diff changeset
   205
    virtual ~GTextEditor();
hgs
parents:
diff changeset
   206
    void setBorderColor(QColor & color) { m_borderColor = color; }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
  protected:
hgs
parents:
diff changeset
   209
    virtual void paintBorder(QPainter * painter);
hgs
parents:
diff changeset
   210
    virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
hgs
parents:
diff changeset
   211
  private:
hgs
parents:
diff changeset
   212
    QColor m_borderColor;
hgs
parents:
diff changeset
   213
  };
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
  class GProgressEditor : public GTextEditor
hgs
parents:
diff changeset
   217
  {
hgs
parents:
diff changeset
   218
    Q_OBJECT
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
  public:
hgs
parents:
diff changeset
   221
    GProgressEditor(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent = 0);
hgs
parents:
diff changeset
   222
    virtual ~GProgressEditor();
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
    void setProgressColor(QColor & color) { m_progressColor = color; }
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    public slots:
hgs
parents:
diff changeset
   227
    void setProgress(int percent);
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
  protected:
hgs
parents:
diff changeset
   230
    virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
  private:
hgs
parents:
diff changeset
   233
    int m_percent;
hgs
parents:
diff changeset
   234
    QColor m_progressColor;
hgs
parents:
diff changeset
   235
  };
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
  class TextEditItem : public NativeChromeItem 
hgs
parents:
diff changeset
   238
  {
hgs
parents:
diff changeset
   239
    Q_OBJECT
hgs
parents:
diff changeset
   240
  public:
hgs
parents:
diff changeset
   241
    TextEditItem(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent = 0);
hgs
parents:
diff changeset
   242
    virtual ~TextEditItem();
hgs
parents:
diff changeset
   243
    GTextEditor * editor() { return m_textEditor; } 
hgs
parents:
diff changeset
   244
    QString text() { return m_textEditor->text(); }
hgs
parents:
diff changeset
   245
    void setText(const QString & text){ m_textEditor->setText(text); }
16
hgs
parents: 12
diff changeset
   246
#ifdef BROWSER_LAYOUT_TENONE
hgs
parents: 12
diff changeset
   247
    void setTextFont(QFont & font){ m_textEditor->setTextFont(font); }
hgs
parents: 12
diff changeset
   248
#endif
3
hgs
parents:
diff changeset
   249
    int characterCount() { return m_textEditor->characterCount(); }
hgs
parents:
diff changeset
   250
    void setCursorPosition(int pos) { m_textEditor->setCursorPosition(pos); }
hgs
parents:
diff changeset
   251
    void selectAll() { m_textEditor->selectAll(); }
hgs
parents:
diff changeset
   252
    void unselect() { m_textEditor->unselect(); }
hgs
parents:
diff changeset
   253
    int getTextOptions() { return (int) m_textEditor->inputMethodHints(); }
hgs
parents:
diff changeset
   254
    // Calling this function will overwrite the existing options
hgs
parents:
diff changeset
   255
    void setTextOptions (int flag);
hgs
parents:
diff changeset
   256
    void setMaxTextLength(int length) { m_textEditor->setMaxTextLength(length); }
16
hgs
parents: 12
diff changeset
   257
    void cut() { m_textEditor->cut(); }
hgs
parents: 12
diff changeset
   258
    void copy() { m_textEditor->copy(); }
hgs
parents: 12
diff changeset
   259
    void paste() { m_textEditor->paste(); }
hgs
parents: 12
diff changeset
   260
    void setContextMenuStatus(bool on) { m_textEditor->setContextMenuStatus(on); }
hgs
parents: 12
diff changeset
   261
hgs
parents: 12
diff changeset
   262
  Q_SIGNALS:
hgs
parents: 12
diff changeset
   263
    void contextEvent(bool);
hgs
parents: 12
diff changeset
   264
3
hgs
parents:
diff changeset
   265
  private slots:	
hgs
parents:
diff changeset
   266
	void tapped(QPointF&);
hgs
parents:
diff changeset
   267
	void focusChanged(bool focusIn);
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
  protected:
hgs
parents:
diff changeset
   270
    virtual void resizeEvent(QGraphicsSceneResizeEvent * ev);
hgs
parents:
diff changeset
   271
  private:
hgs
parents:
diff changeset
   272
    GTextEditor * m_textEditor;
16
hgs
parents: 12
diff changeset
   273
    bool m_justFocusIn;
3
hgs
parents:
diff changeset
   274
  };
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
} // namespace GVA
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
#endif // __EDITOR_WIDGET_H__