новые иконки в OpenBoard
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OpenBoard/src/domain/UBGraphicsWidgetItem.h

262 lines
8.1 KiB

13 years ago
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
12 years ago
* the Free Software Foundation, either version 2 of the License, or
13 years ago
* (at your option) any later version.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBGRAPHICSWIDGETITEM_H
#define UBGRAPHICSWIDGETITEM_H
#include <QtGui>
#include <QtWebKit>
#include <QDomElement>
#include "UBGraphicsWebView.h"
#include "core/UB.h"
class UBWidgetUniboardAPI;
class UBGraphicsScene;
class UBW3CWidgetAPI;
class UBW3CWidgetWebStorageAPI;
class UBGraphiscItem;
class UBGraphiscItemDelegate;
struct UBWidgetType
{
enum Enum
{
W3C = 0, Apple, Other
};
};
class UBGraphicsWidgetItem : public UBGraphicsWebView
{
Q_OBJECT
public:
UBGraphicsWidgetItem(const QUrl &pWidgetUrl = QUrl(), QGraphicsItem *parent = 0);
~UBGraphicsWidgetItem();
enum { Type = UBGraphicsItemType::GraphicsWidgetItemType };
virtual int type() const { return Type; }
virtual void initialize();
QUrl mainHtml();
void loadMainHtml();
QUrl widgetUrl();
QString mainHtmlFileName();
bool hasEmbededObjects();
bool hasEmbededFlash();
bool canBeContent();
bool canBeTool();
QString preference(const QString& key) const;
void setPreference(const QString& key, QString value);
QMap<QString, QString> preferences() const;
void removePreference(const QString& key);
void removeAllPreferences();
QString datastoreEntry(const QString& key) const;
void setDatastoreEntry(const QString& key, QString value);
QMap<QString, QString> datastoreEntries() const;
void removeDatastoreEntry(const QString& key);
void removeAllDatastoreEntries();
virtual UBGraphicsItemDelegate* Delegate() const;
virtual void remove();
void removeScript();
void processDropEvent(QGraphicsSceneDragDropEvent *event);
bool isDropableData(const QMimeData *data) const;
virtual QUrl getOwnFolder() const;
virtual void setOwnFolder(const QUrl &newFolder);
virtual void setSnapshotPath(const QUrl &newFilePath);
virtual QUrl getSnapshotPath();
virtual void clearSource();
virtual void setUuid(const QUuid &pUuid);
QSize nominalSize() const;
bool hasLoadedSuccessfully() const;
bool freezable();
bool resizable();
bool isFrozen();
QPixmap snapshot();
void setSnapshot(const QPixmap& pix);
QPixmap takeSnapshot();
virtual UBItem* deepCopy() const = 0;
virtual UBGraphicsScene* scene();
static int widgetType(const QUrl& pUrl);
static QString widgetName(const QUrl& pUrl);
static QString iconFilePath(const QUrl& pUrl);
public slots:
void freeze();
void unFreeze();
protected:
enum OSType
{
type_NONE = 0, // 0000
type_WIN = 1, // 0001
type_MAC = 2, // 0010
type_UNIX = 4, // 0100
type_ALL = 7, // 0111
};
bool mFirstReleaseAfterMove;
bool mInitialLoadDone;
bool mIsFreezable;
bool mIsResizable;
bool mLoadIsErronous;
bool mMouseIsPressed;
int mCanBeContent;
int mCanBeTool;
QSize mNominalSize;
QString mMainHtmlFileName;
QUrl mMainHtmlUrl;
QUrl mWidgetUrl;
QMap<QString, QString> mDatastore;
QMap<QString, QString> mPreferences;
virtual bool event(QEvent *event);
virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
virtual void sendJSEnterEvent();
virtual void sendJSLeaveEvent();
virtual void injectInlineJavaScript();
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
protected slots:
void geometryChangeRequested(const QRect& geom);
virtual void javaScriptWindowObjectCleared();
void mainFrameLoadFinished(bool ok);
12 years ago
private slots:
void onLinkClicked(const QUrl& url);
private:
bool mIsFrozen;
bool mIsTakingSnapshot;
bool mShouldMoveWidget;
UBWidgetUniboardAPI* mUniboardAPI;
QPixmap mSnapshot;
QPointF mLastMousePos;
QUrl ownFolder;
QUrl SnapshotFile;
static bool sInlineJavaScriptLoaded;
static QStringList sInlineJavaScripts;
};
class UBGraphicsAppleWidgetItem : public UBGraphicsWidgetItem
{
Q_OBJECT
public:
UBGraphicsAppleWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0);
~UBGraphicsAppleWidgetItem();
virtual void copyItemParameters(UBItem *copy) const;
virtual void setUuid(const QUuid &pUuid);
virtual UBItem* deepCopy() const;
};
class UBGraphicsW3CWidgetItem : public UBGraphicsWidgetItem
{
Q_OBJECT
public:
class PreferenceValue
{
public:
PreferenceValue()
{
/* NOOP */
}
PreferenceValue(const QString& pValue, bool pReadonly)
{
value = pValue;
readonly = pReadonly;
}
bool readonly;
QString value;
};
class Metadata
{
public:
QString id;
QString name;
QString description;
QString author;
QString authorEmail;
QString authorHref;
QString version;
};
UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0);
~UBGraphicsW3CWidgetItem();
virtual void setUuid(const QUuid &pUuid);
virtual UBItem* deepCopy() const;
virtual void copyItemParameters(UBItem *copy) const;
virtual void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget );
QMap<QString, PreferenceValue> preferences();
Metadata metadatas() const;
static QString freezedWidgetFilePath();
static QString createNPAPIWrapper(const QString& url, const QString& pMimeType = QString(), const QSize& sizeHint = QSize(300, 150), const QString& pName = QString());
static QString createNPAPIWrapperInDir(const QString& url, const QDir& pDir, const QString& pMimeType = QString(), const QSize& sizeHint = QSize(300, 150), const QString& pName = QString());
static QString createHtmlWrapperInDir(const QString& html, const QDir& pDir, const QSize& sizeHint, const QString& pName);
static QString freezedWidgetPage();
static bool hasNPAPIWrapper(const QString& pMimeType);
Metadata mMetadatas;
private slots:
virtual void javaScriptWindowObjectCleared();
private:
static void loadNPAPIWrappersTemplates();
static QString textForSubElementByLocale(QDomElement rootElement, QString subTagName, QLocale locale);
UBW3CWidgetAPI* mW3CWidgetAPI;
QMap<QString, PreferenceValue> mPreferences;
static bool sTemplateLoaded;
static QString sNPAPIWrappperConfigTemplate;
static QMap<QString, QString> sNPAPIWrapperTemplates;
};
#endif // UBGRAPHICSWIDGETITEM_H