From 25bf9810eed5923626425d590b781efd7004813a Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 16 Aug 2011 18:30:31 +0300 Subject: [PATCH] JVM in widgets under Windows + Geogebra widget --- .../interactive/Geogebra.wgt/config.xml | 12 +++ .../library/interactive/Geogebra.wgt/icon.png | Bin 0 -> 2569 bytes .../Geogebra.wgt/images/loading.gif | Bin 0 -> 2038 bytes .../interactive/Geogebra.wgt/index.html | 71 ++++++++++++++++++ src/domain/UBAbstractWidget.cpp | 43 ++++++++++- src/domain/UBAbstractWidget.h | 25 +++--- src/domain/UBGraphicsScene.cpp | 13 +--- src/domain/UBW3CWidget.cpp | 50 ++++++++++-- src/gui/UBToolWidget.cpp | 1 + 9 files changed, 186 insertions(+), 29 deletions(-) create mode 100644 resources/library/interactive/Geogebra.wgt/config.xml create mode 100644 resources/library/interactive/Geogebra.wgt/icon.png create mode 100644 resources/library/interactive/Geogebra.wgt/images/loading.gif create mode 100644 resources/library/interactive/Geogebra.wgt/index.html diff --git a/resources/library/interactive/Geogebra.wgt/config.xml b/resources/library/interactive/Geogebra.wgt/config.xml new file mode 100644 index 00000000..64bb595c --- /dev/null +++ b/resources/library/interactive/Geogebra.wgt/config.xml @@ -0,0 +1,12 @@ + + + Geogebra + + diff --git a/resources/library/interactive/Geogebra.wgt/icon.png b/resources/library/interactive/Geogebra.wgt/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5397e47df90bbf133171f2967114176bfcde57 GIT binary patch literal 2569 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 literal 0 HcmV?d00001 diff --git a/resources/library/interactive/Geogebra.wgt/images/loading.gif b/resources/library/interactive/Geogebra.wgt/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ccc287b15248f417ceaa1eca872add966169c4e GIT binary patch literal 2038 zcmY*ZS5Q-X8vjmCPDp_eAdo;3OsJs*C6R#i2!tYF=tYVN2_VwNi*mV3On^gz!*IdD z)!EgnsBjhQ=-4}!MIF#}?1f?MqmI3oJ;8l|hco{t z_wN1p@#D#pCr3v|A3b`6qUeJM5ANT;KRi7A^5x65YuBDSb?WNXs}mCw;o;$fgM+(v z?RxX(&Gzlv_w3no`}XavTesf4dGq@9>xT~?_VV(&bm`KK8#fLfJh*P%x(gRB?AWp6 z>({T(pFdAePk;98SzBA%hYuf;l9KM+xnpf@efjd`O`A6P`1m}2{J5~N@aWN_0|NsW zFJ9cgfB);(ugAv5^78UZOG`&aMz(C(^6J&A@$vBk2M!!Re*DRkCvV@rJ%9duQ&ZFC z&6|%MJC>T7diwO~vuDqqIdg{1W>-{H+`W7E)2C0@u3bBH=+KcPN4mSatE;Q|eEz+A z_xk$!3l`BmqlUl8AXlTgH%*1iLx3^cRRCaZB<>chFw6sX2(#FQdTeogCH#f`W z^18Y@g+ftTS-EP}s%6WTZP>73DMouWw$sIM?JM&rsJEKUMZh-VrsT14LR#DO+;X-7%6#-9Q5DLeK zJ4v?WN~HV2@NA$Y#8SJ}WbjLyUEucDI08&MNvK~jkq&Ce-qcYh{PVBq>EdjFL5QpQ zC63q7W;AeWL!fvGnjf5OltxxV*$ilOVuGy;@XPtCU~i{}R!xb*zCIw-TIefv1V>W6 z#@@0S8Dr^=@ z1#xp+z{Q$mM+r30SoKad7-Hnaj+qxV8vU#tvKXsVc*)lBQ-Dz-SsS1ez-4+MGEa|2 zTTLLv$dIrIrIy5+s9qQdbwJ7pHFKN9?%EJp0I;}7h*d!*N1XhdG&^IdoHRF()=HyR zhs&Z6POQ<)i#BC3%&nY7TFophWeh@Qg!^U?;!UDL(-dq=wHUx8u$SurLX!~#PWcD?gP%zAW?g5wuJI@unE_?t;=%F^#Bp)@psE&ybpulvpnwq-u=KxPZ%Gos0)%mZ z6N|L>2>g4p7(G3c%fwRFw7YoGMd=LxKi9;HdlIUsYmg?DPzn-PrG~?Gu6Bw4BPbsn z7TT4R`^iK=jzwLSm52EIh2FC!f|a4Vm))4OqsP%|i{iz+WYkl`3$Y#rz|# zD$cpv;3mQSJ=(j8`Nn8}UuwT5ii9egbrG5thE!Zg^@sR>3S{#{6`so%bhC;Z5MnY> zX)ZWN=?4ixh}$eNj{FTi0qqppG+>nQ-Dc8xn9qe!qU%KPXk<=+TduPuc}S^jUXmJU ziDW%6wP^qPqTJ$I!QlF3i-XJKcMf`55A0+mR4FMt(dvu~gc`zh+6qsjHaE9S{I`K + + + +
+ + + diff --git a/src/domain/UBAbstractWidget.cpp b/src/domain/UBAbstractWidget.cpp index 6ff6116b..a5fafc18 100644 --- a/src/domain/UBAbstractWidget.cpp +++ b/src/domain/UBAbstractWidget.cpp @@ -44,8 +44,8 @@ UBAbstractWidget::UBAbstractWidget(const QUrl& pWidgetUrl, QWidget *parent) , mInitialLoadDone(false) , mLoadIsErronous(false) , mIsFreezable(true) - , mCanBeContent(true) - , mCanBeTool(true) + , mCanBeContent(0) + , mCanBeTool(0) , mIsFrozen(false) , mIsTakingSnapshot(false) { @@ -74,12 +74,51 @@ UBAbstractWidget::UBAbstractWidget(const QUrl& pWidgetUrl, QWidget *parent) setMouseTracking(true); } +bool UBAbstractWidget::canBeContent() +{ + // if we under MAC OS + #if defined(Q_OS_MAC) + return mCanBeContent & OSType::type_MAC; + #endif + + // if we under UNIX OS + #if defined(Q_OS_UNIX) + return mCanBeContent & OSType::type_UNIX; + #endif + + // if we under WINDOWS OS + #if defined(Q_OS_WIN) + return mCanBeContent & OSType::type_WIN; + #endif +} + +bool UBAbstractWidget::canBeTool() +{ + // if we under MAC OS + #if defined(Q_OS_MAC) + return mCanBeTool & OSType::type_MAC; + #endif + + // if we under UNIX OS + #if defined(Q_OS_UNIX) + return mCanBeTool & OSType::type_UNIX; + #endif + + // if we under WINDOWS OS + #if defined(Q_OS_WIN) + return mCanBeTool & OSType::type_WIN; + #endif +} UBAbstractWidget::~UBAbstractWidget() { // NOOP } +void UBAbstractWidget::loadMainHtml() +{ + QWebView::load(mMainHtmlUrl); +} bool UBAbstractWidget::event(QEvent *event) { diff --git a/src/domain/UBAbstractWidget.h b/src/domain/UBAbstractWidget.h index e96706e9..5c077d04 100644 --- a/src/domain/UBAbstractWidget.h +++ b/src/domain/UBAbstractWidget.h @@ -39,6 +39,8 @@ class UBAbstractWidget : public UBRoutedMouseEventWebView UBAbstractWidget(const QUrl& pWidgetUrl, QWidget *parent = 0); virtual ~UBAbstractWidget(); + void loadMainHtml(); + QUrl mainHtml() { return mMainHtmlUrl; @@ -64,15 +66,8 @@ class UBAbstractWidget : public UBRoutedMouseEventWebView return mNominalSize; } - bool canBeContent() const - { - return mCanBeContent; - } - - bool canBeTool() const - { - return mCanBeTool; - } + bool canBeContent(); + bool canBeTool(); bool hasLoadedSuccessfully() const { @@ -123,8 +118,16 @@ class UBAbstractWidget : public UBRoutedMouseEventWebView bool mLoadIsErronous; bool mIsFreezable; - bool mCanBeContent; - bool mCanBeTool; + int mCanBeContent; + int mCanBeTool; + enum OSType + { + type_NONE = 0, // 0000 + type_WIN = 1, // 0001 + type_MAC = 2, // 0010 + type_UNIX = 4, // 0100 + type_ALL = 7, // 0111 + }; virtual void injectInlineJavaScript(); virtual void paintEvent(QPaintEvent * event); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 0c36530b..0974105f 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1091,7 +1091,6 @@ void UBGraphicsScene::addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, co graphicsWidget->setFlag(QGraphicsItem::ItemIsSelectable, true); graphicsWidget->setZValue(getNextObjectZIndex()); -// QGraphicsScene::addWidget(graphicsWidget->widgetWebView()); addItem(graphicsWidget); qreal ssf = 1 / UBApplication::boardController->systemScaleFactor(); @@ -1103,21 +1102,13 @@ void UBGraphicsScene::addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, co if (graphicsWidget->widgetWebView()->canBeContent()) { + graphicsWidget->widgetWebView()->loadMainHtml(); + graphicsWidget->setSelected(true); UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, 0, graphicsWidget); UBApplication::undoStack->push(uc); setDocumentUpdated(); - -// graphicsWidget->widgetWebView()->setParent(graphicsWidget->v)); -// QObject *zz1= graphicsWidget->widgetWebView()->parent(); -// QWidget *zz2= graphicsWidget->widgetWebView()->parentWidget(); -// -// QObject *zz3= graphicsWidget->parent(); -// QGraphicsWidget *zz4= graphicsWidget->parentWidget(); - -// graphicsWidget->widgetWebView()->loadUrl(); - } else { diff --git a/src/domain/UBW3CWidget.cpp b/src/domain/UBW3CWidget.cpp index b3fbf575..7a1af1e2 100644 --- a/src/domain/UBW3CWidget.cpp +++ b/src/domain/UBW3CWidget.cpp @@ -86,8 +86,51 @@ UBW3CWidget::UBW3CWidget(const QUrl& pWidgetUrl, QWidget *parent) QString roles = widgetElement.attribute("ub:roles", "content tool").trimmed().toLower(); - mCanBeTool = roles == "" || roles.contains("tool"); - mCanBeContent = roles == "" || roles.contains("content"); + //------------------------------// + + if( roles == "" || roles.contains("tool") ) + { + mCanBeTool = UBAbstractWidget::OSType::type_ALL; + } + + if( roles.contains("twin") ) + { + mCanBeTool |= UBAbstractWidget::OSType::type_WIN; + } + + if( roles.contains("tmac") ) + { + mCanBeTool |= UBAbstractWidget::OSType::type_MAC; + } + + if( roles.contains("tunix") ) + { + mCanBeTool |= UBAbstractWidget::OSType::type_UNIX; + } + + //---------// + + if( roles == "" || roles.contains("content") ) + { + mCanBeContent = UBAbstractWidget::OSType::type_ALL; + } + + if( roles.contains("cwin") ) + { + mCanBeContent |= UBAbstractWidget::OSType::type_WIN; + } + + if( roles.contains("cmac") ) + { + mCanBeContent |= UBAbstractWidget::OSType::type_MAC; + } + + if( roles.contains("cunix") ) + { + mCanBeContent |= UBAbstractWidget::OSType::type_UNIX; + } + + //------------------------------// QDomNodeList contentDomList = widgetElement.elementsByTagName("content"); @@ -159,8 +202,6 @@ UBW3CWidget::UBW3CWidget(const QUrl& pWidgetUrl, QWidget *parent) connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(javaScriptWindowObjectCleared())); - QWebView::load(mMainHtmlUrl); - setFixedSize(QSize(width, height)); mNominalSize = QSize(width, height); @@ -171,7 +212,6 @@ UBW3CWidget::~UBW3CWidget() // NOOP } - void UBW3CWidget::javaScriptWindowObjectCleared() { UBWidgetUniboardAPI *uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene(), 0); diff --git a/src/gui/UBToolWidget.cpp b/src/gui/UBToolWidget.cpp index 59ff2af4..ea1bdee1 100644 --- a/src/gui/UBToolWidget.cpp +++ b/src/gui/UBToolWidget.cpp @@ -72,6 +72,7 @@ UBToolWidget::UBToolWidget(UBAbstractWidget* pWidget, QWidget* pParent) , mShouldMoveWidget(false) { mToolWidget->setParent(this); + mToolWidget->loadMainHtml(); initialize();