diff -r 6aeb7a756187 -r 3c88a81ff781 ginebra2/CopyCutPasteSnippet.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ginebra2/CopyCutPasteSnippet.h Fri Oct 15 17:30:59 2010 -0400 @@ -0,0 +1,124 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, version 2.1 of the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, +* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". +* +* Description: +* +*/ + +#ifndef __COPY_CUT_PASTE_SNIPPET_H__ +#define __COPY_CUT_PASTE_SNIPPET_H__ + +#include "ChromeSnippet.h" +#include "ChromeWidget.h" +#include "NativeChromeItem.h" +#include "ExternalEventCharm.h" + +#include + +namespace GVA { + + class CopyCutPasteButton : public QObject + { + Q_OBJECT + + public: + CopyCutPasteButton(const QString & text, QWidget * parent = 0); + virtual ~CopyCutPasteButton() {} + + void render(QPainter * painter, const QPoint & targetOffset = QPoint()); + void setMousePressed(bool pressed) { m_mousePressed = pressed; } + QString text() const { return m_text; } + void setText(QString & text) { m_text = text; } + QSize size() const { return m_size; } + void setFixedSize(int w, int h) { m_size = QSize(w, h); } + void setDisabled(bool disabled) { m_disabled = disabled; } + bool isEnabled() const { return !m_disabled; } + + void mousePressEvent(QGraphicsSceneMouseEvent * event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); + + signals: + void clicked(); + + private: + QString m_text; + bool m_mousePressed; + QSize m_size; + bool m_disabled; + }; + + class CopyCutPasteItem : public NativeChromeItem + { + Q_OBJECT + + public: + CopyCutPasteItem(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent = 0); + virtual ~CopyCutPasteItem(); + void buildMenu(bool isContentSelected); + void setEditorSnippet(ChromeSnippet * snippet) { m_editorSnippet = snippet; } + ChromeSnippet * editorSnippet() { return m_editorSnippet; } + + private slots: + void cut(); + void copy(); + void paste(); + + protected: + virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget); + virtual void mousePressEvent(QGraphicsSceneMouseEvent * event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); + + private: + void reset(); + + private: + CopyCutPasteButton * m_cutButton; + CopyCutPasteButton * m_copyButton; + CopyCutPasteButton * m_pasteButton; + ChromeSnippet * m_editorSnippet; + }; + + class CopyCutPasteSnippet : public ChromeSnippet + { + Q_OBJECT + public: + CopyCutPasteSnippet(const QString & elementId, ChromeWidget * chrome, QGraphicsWidget * widget, const QWebElement & element); + virtual ~CopyCutPasteSnippet() { if (m_externalEventCharm) delete m_externalEventCharm ;} + static CopyCutPasteSnippet * instance(const QString& elementId, ChromeWidget * chrome, const QWebElement & element); + virtual void setChromeWidget(QGraphicsWidget * widget); + + public slots: + virtual void setVisible(bool visiblity, bool animate = true); + + private: + void connectAll(); + CopyCutPasteItem *copyCutPasteItem(); + + private slots: + void onTimeout(); + void onChromeComplete(); + void onContextEvent(bool isContentSelected, QString snippetId); + void onExternalMouseEvent(QEvent *, const QString &, const QString &); + void onAspectChanged(int aspect); + + private: + QTimer * m_timer; + ExternalEventCharm * m_externalEventCharm; + }; +} + +#endif