Merge conflict resolved

preferencesAboutTextFull
Ilia Ryabokon 12 years ago
commit 22b68c8a35
  1. 4
      resources/library/search/Image Planete.wgs/css/basic.css
  2. 0
      resources/library/search/Image Planete.wgs/images/down.png
  3. 0
      resources/library/search/Image Planete.wgs/images/greySquare.png
  4. 0
      resources/library/search/Image Planete.wgs/images/icon-close.png
  5. 0
      resources/library/search/Image Planete.wgs/images/popupBack.png
  6. 0
      resources/library/search/Image Planete.wgs/images/search.png
  7. 0
      resources/library/search/Image Planete.wgs/images/search_app.png
  8. 0
      resources/library/search/Image Planete.wgs/images/trgDown.png
  9. 0
      resources/library/search/Image Planete.wgs/images/trgUp.png
  10. 0
      resources/library/search/Image Planete.wgs/images/up.png
  11. 6
      resources/library/search/Image Planete.wgs/index.html
  12. 0
      resources/library/search/Image Planete.wgs/scripts/jquery-1.6.2.min.js
  13. 10
      resources/style.qss
  14. 8
      src/adaptors/UBCFFSubsetAdaptor.cpp
  15. 17
      src/adaptors/UBSvgSubsetAdaptor.cpp
  16. 38
      src/adaptors/publishing/UBDocumentPublisher.cpp
  17. 127
      src/api/UBW3CWidgetAPI.cpp
  18. 12
      src/api/UBW3CWidgetAPI.h
  19. 17
      src/api/UBWidgetMessageAPI.cpp
  20. 4
      src/api/UBWidgetMessageAPI.h
  21. 13
      src/api/UBWidgetUniboardAPI.cpp
  22. 134
      src/board/UBBoardController.cpp
  23. 8
      src/board/UBBoardController.h
  24. 9
      src/board/UBBoardPaletteManager.cpp
  25. 1
      src/board/UBBoardPaletteManager.h
  26. 69
      src/board/UBBoardView.cpp
  27. 3
      src/board/UBBoardView.h
  28. 4
      src/board/UBFeaturesController.cpp
  29. 5
      src/board/UBLibraryController.cpp
  30. 3
      src/core/UB.h
  31. 5
      src/core/UBApplicationController.cpp
  32. 43
      src/document/UBDocumentController.cpp
  33. 2
      src/document/UBDocumentController.h
  34. 476
      src/domain/UBAbstractWidget.cpp
  35. 155
      src/domain/UBAbstractWidget.h
  36. 48
      src/domain/UBAngleWidget.cpp
  37. 25
      src/domain/UBAngleWidget.h
  38. 77
      src/domain/UBAppleWidget.cpp
  39. 36
      src/domain/UBAppleWidget.h
  40. 54
      src/domain/UBGraphicsDelegateFrame.cpp
  41. 5
      src/domain/UBGraphicsDelegateFrame.h
  42. 34
      src/domain/UBGraphicsItemDelegate.cpp
  43. 2
      src/domain/UBGraphicsItemDelegate.h
  44. 6
      src/domain/UBGraphicsMediaItem.cpp
  45. 4
      src/domain/UBGraphicsMediaItem.h
  46. 13
      src/domain/UBGraphicsMediaItemDelegate.cpp
  47. 32
      src/domain/UBGraphicsScene.cpp
  48. 9
      src/domain/UBGraphicsScene.h
  49. 11
      src/domain/UBGraphicsStrokesGroup.cpp
  50. 160
      src/domain/UBGraphicsWebView.cpp
  51. 62
      src/domain/UBGraphicsWebView.h
  52. 1134
      src/domain/UBGraphicsWidgetItem.cpp
  53. 210
      src/domain/UBGraphicsWidgetItem.h
  54. 8
      src/domain/UBGraphicsWidgetItemDelegate.cpp
  55. 525
      src/domain/UBW3CWidget.cpp
  56. 126
      src/domain/UBW3CWidget.h
  57. 34
      src/domain/domain.pri
  58. 4
      src/frameworks/UBCoreGraphicsScene.cpp
  59. 7
      src/gui/UBDockPalette.cpp
  60. 2
      src/gui/UBDockPalette.h
  61. 7
      src/gui/UBFavoriteToolPalette.cpp
  62. 1
      src/gui/UBFeaturesWidget.cpp
  63. 2
      src/gui/UBKeyboardPalette.cpp
  64. 10
      src/gui/UBKeyboardPalette.h
  65. 3
      src/gui/UBKeyboardPalette_linux.cpp
  66. 51
      src/gui/UBKeyboardPalette_mac.cpp
  67. 7
      src/gui/UBKeyboardPalette_win.cpp
  68. 2
      src/gui/UBRubberBand.cpp
  69. 8
      src/gui/UBTeacherGuideWidgetsTools.cpp
  70. 261
      src/gui/UBToolWidget.cpp
  71. 56
      src/gui/UBToolWidget.h
  72. 2
      src/podcast/quicktime/UBAudioQueueRecorder.cpp
  73. 2
      src/podcast/quicktime/UBQuickTimeFile.cpp
  74. 100
      src/web/UBRoutedMouseEventWebView.cpp
  75. 45
      src/web/UBRoutedMouseEventWebView.h
  76. 5
      src/web/UBWebController.cpp
  77. 2
      src/web/web.pri

@ -154,6 +154,10 @@ a {
vertical-align: top; vertical-align: top;
} }
.imgContainer img{
max-width: 150px;
max-height:150px;
}
.filterContainer{ .filterContainer{
float: left; float: left;

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 214 B

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 931 B

After

Width:  |  Height:  |  Size: 931 B

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 475 B

After

Width:  |  Height:  |  Size: 475 B

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 448 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -8,7 +8,7 @@
<script type="text/javascript"> <script type="text/javascript">
var category = "image"; var category = "image";
var thumbnails = true; var thumbnails = true;
var minHeight = 180; var minHeight = 150;
var minWidth = 150; var minWidth = 150;
var currentIndex = 0; var currentIndex = 0;
@ -78,12 +78,12 @@
// There is also a result.file property which has the escaped version // There is also a result.file property which has the escaped version
if (thumbnails) { if (thumbnails) {
newImg.src = result.file; newImg.src = result.file;
if(result.height >= result.width) /*if(result.height >= result.width)
newImg.height = minHeight; newImg.height = minHeight;
else{ else{
newImg.width = minWidth; newImg.width = minWidth;
//newImg.style.margin = (120 - result.height)/2 + "px 0"; //newImg.style.margin = (120 - result.height)/2 + "px 0";
} }*/
} else { } else {
newImg.src = "./images/thumbnail_icon.png"; newImg.src = "./images/thumbnail_icon.png";
} }

@ -70,6 +70,16 @@ QLabel#UBTGMediaDropMeLabel
padding: 2px; padding: 2px;
} }
QComboBox#DockPaletteWidgetComboBox QAbstractItemView
{
background-color: white;
color: black;
selection-background-color: lightgreen;
selection-color: black;
}
QComboBox#DockPaletteWidgetComboBox QComboBox#DockPaletteWidgetComboBox
{ {
background: white; background: white;

@ -31,7 +31,7 @@
#include "domain/UBGraphicsWidgetItem.h" #include "domain/UBGraphicsWidgetItem.h"
#include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsTextItemDelegate.h" #include "domain/UBGraphicsTextItemDelegate.h"
#include "domain/UBW3CWidget.h" #include "domain/UBGraphicsWidgetItem.h"
#include "frameworks/UBFileSystemUtils.h" #include "frameworks/UBFileSystemUtils.h"
@ -776,7 +776,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgFlash(const QDomElement &ele
return false; return false;
} }
QString flashUrl = UBW3CWidget::createNPAPIWrapperInDir(flashPath, tmpFlashDir, "application/x-shockwave-flash" QString flashUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(flashPath, tmpFlashDir, "application/x-shockwave-flash"
,QSize(mCurrentSceneRect.width(), mCurrentSceneRect.height())); ,QSize(mCurrentSceneRect.width(), mCurrentSceneRect.height()));
UBGraphicsWidgetItem *flashItem = mCurrentScene->addW3CWidget(QUrl::fromLocalFile(flashUrl)); UBGraphicsWidgetItem *flashItem = mCurrentScene->addW3CWidget(QUrl::fromLocalFile(flashUrl));
flashItem->setSourceUrl(urlPath); flashItem->setSourceUrl(urlPath);
@ -1049,10 +1049,6 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *ite
QTransform rTransform; QTransform rTransform;
QPointF newVector = rTransform.map(oldVector); QPointF newVector = rTransform.map(oldVector);
QRectF sr = mCurrentScene->sceneRect();
QRectF sr1 = mCurrentSceneRect;
QRectF sr2 = mCurrentScene->normalizedSceneRect();
QTransform tr = item->sceneTransform(); QTransform tr = item->sceneTransform();
item->setTransform(rTransform.scale(fullScaleX, fullScaleY), true); item->setTransform(rTransform.scale(fullScaleX, fullScaleY), true);
tr = item->sceneTransform(); tr = item->sceneTransform();

@ -27,7 +27,6 @@
#include "domain/UBGraphicsPDFItem.h" #include "domain/UBGraphicsPDFItem.h"
#include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsTextItemDelegate.h" #include "domain/UBGraphicsTextItemDelegate.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBGraphicsStroke.h" #include "domain/UBGraphicsStroke.h"
#include "domain/UBGraphicsStrokesGroup.h" #include "domain/UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsGroupContainerItem.h"
@ -2488,7 +2487,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsW3CWidgetToSvg(UBGraphicsW3C
void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsWidgetToSvg(UBGraphicsWidgetItem* item) void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsWidgetToSvg(UBGraphicsWidgetItem* item)
{ {
QUrl widgetRootUrl = item->widgetWebView()->widgetUrl(); QUrl widgetRootUrl = item->widgetUrl();
QString uuid = UBStringUtils::toCanonicalUuid(item->uuid()); QString uuid = UBStringUtils::toCanonicalUuid(item->uuid());
QString widgetDirectoryPath = UBPersistenceManager::widgetDirectory; QString widgetDirectoryPath = UBPersistenceManager::widgetDirectory;
if (widgetRootUrl.toString().startsWith("file://")) if (widgetRootUrl.toString().startsWith("file://"))
@ -2517,13 +2516,13 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsWidgetToSvg(UBGraphicsWidget
graphicsItemToSvg(item); graphicsItemToSvg(item);
if (item->widgetWebView()->isFrozen()) if (item->isFrozen())
{ {
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "frozen", xmlTrue); mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "frozen", xmlTrue);
} }
QString snapshotPath = mDocumentPath + "/" + UBPersistenceManager::widgetDirectory + "/" + uuid + ".png"; QString snapshotPath = mDocumentPath + "/" + UBPersistenceManager::widgetDirectory + "/" + uuid + ".png";
item->widgetWebView()->takeSnapshot().save(snapshotPath, "PNG"); item->takeSnapshot().save(snapshotPath, "PNG");
mXmlWriter.writeStartElement(nsXHtml, "iframe"); mXmlWriter.writeStartElement(nsXHtml, "iframe");
@ -2532,10 +2531,10 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsWidgetToSvg(UBGraphicsWidget
mXmlWriter.writeAttribute("height", QString("%1").arg(item->boundingRect().height())); mXmlWriter.writeAttribute("height", QString("%1").arg(item->boundingRect().height()));
QString startFileUrl; QString startFileUrl;
if (item->widgetWebView()->mainHtmlFileName().startsWith("http://")) if (item->mainHtmlFileName().startsWith("http://"))
startFileUrl = item->widgetWebView()->mainHtmlFileName(); startFileUrl = item->mainHtmlFileName();
else else
startFileUrl = widgetRootUrl.toString() + "/" + item->widgetWebView()->mainHtmlFileName(); startFileUrl = widgetRootUrl.toString() + "/" + item->mainHtmlFileName();
mXmlWriter.writeAttribute("src", startFileUrl); mXmlWriter.writeAttribute("src", startFileUrl);
mXmlWriter.writeEndElement(); //iFrame mXmlWriter.writeEndElement(); //iFrame
@ -2626,13 +2625,13 @@ UBGraphicsW3CWidgetItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::graphicsW3CWidge
QPixmap snapshot(pixPath); QPixmap snapshot(pixPath);
if (!snapshot.isNull()) if (!snapshot.isNull())
widgetItem->w3cWidget()->setSnapshot(snapshot); widgetItem->setSnapshot(snapshot);
QStringRef frozen = mXmlReader.attributes().value(mNamespaceUri, "frozen"); QStringRef frozen = mXmlReader.attributes().value(mNamespaceUri, "frozen");
if (!frozen.isNull() && frozen.toString() == xmlTrue && !snapshot.isNull()) if (!frozen.isNull() && frozen.toString() == xmlTrue && !snapshot.isNull())
{ {
widgetItem->w3cWidget()->freeze(); widgetItem->freeze();
} }
graphicsItemFromSvg(widgetItem); graphicsItemFromSvg(widgetItem);

@ -281,12 +281,12 @@ void UBDocumentPublisher::upgradeDocumentForPublishing()
jsonFile.write(QString(" \"uuid\": \"%1\",\n").arg(UBStringUtils::toCanonicalUuid(widget->uuid())).toUtf8()); jsonFile.write(QString(" \"uuid\": \"%1\",\n").arg(UBStringUtils::toCanonicalUuid(widget->uuid())).toUtf8());
jsonFile.write(QString(" \"id\": \"%1\",\n").arg(widget->metadatas().id).toUtf8()); jsonFile.write(QString(" \"id\": \"%1\",\n").arg(widget->metadatas().id).toUtf8());
jsonFile.write(QString(" \"name\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().name).toUtf8()); jsonFile.write(QString(" \"name\": \"%1\",\n").arg(widget->metadatas().name).toUtf8());
jsonFile.write(QString(" \"description\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().description).toUtf8()); jsonFile.write(QString(" \"description\": \"%1\",\n").arg(widget->metadatas().description).toUtf8());
jsonFile.write(QString(" \"author\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().author).toUtf8()); jsonFile.write(QString(" \"author\": \"%1\",\n").arg(widget->metadatas().author).toUtf8());
jsonFile.write(QString(" \"authorEmail\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().authorEmail).toUtf8()); jsonFile.write(QString(" \"authorEmail\": \"%1\",\n").arg(widget->metadatas().authorEmail).toUtf8());
jsonFile.write(QString(" \"authorHref\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().authorHref).toUtf8()); jsonFile.write(QString(" \"authorHref\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
jsonFile.write(QString(" \"version\": \"%1\",\n").arg(widget->w3cWidget()->metadatas().authorHref).toUtf8()); jsonFile.write(QString(" \"version\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
jsonFile.write(QString(" \"x\": %1,\n").arg(widget->sceneBoundingRect().x()).toUtf8()); jsonFile.write(QString(" \"x\": %1,\n").arg(widget->sceneBoundingRect().x()).toUtf8());
jsonFile.write(QString(" \"y\": %1,\n").arg(widget->sceneBoundingRect().y()).toUtf8()); jsonFile.write(QString(" \"y\": %1,\n").arg(widget->sceneBoundingRect().y()).toUtf8());
@ -298,10 +298,10 @@ void UBDocumentPublisher::upgradeDocumentForPublishing()
QString url = UBPersistenceManager::widgetDirectory + "/" + widget->uuid().toString() + ".wgt"; QString url = UBPersistenceManager::widgetDirectory + "/" + widget->uuid().toString() + ".wgt";
jsonFile.write(QString(" \"src\": \"%1\",\n").arg(url).toUtf8()); jsonFile.write(QString(" \"src\": \"%1\",\n").arg(url).toUtf8());
QString startFile = widget->w3cWidget()->mainHtmlFileName(); QString startFile = widget->mainHtmlFileName();
jsonFile.write(QString(" \"startFile\": \"%1\",\n").arg(startFile).toUtf8()); jsonFile.write(QString(" \"startFile\": \"%1\",\n").arg(startFile).toUtf8());
QMap<QString, QString> preferences = widget->preferences(); QMap<QString, QString> preferences = widget->UBGraphicsWidgetItem::preferences();
jsonFile.write(QString(" \"preferences\": {\n").toUtf8()); jsonFile.write(QString(" \"preferences\": {\n").toUtf8());
@ -360,10 +360,10 @@ void UBDocumentPublisher::upgradeDocumentForPublishing()
void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber) void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber)
{ {
QMap<QString, QString> preferences = widgetItem->preferences(); QMap<QString, QString> preferences = widgetItem->UBGraphicsWidgetItem::preferences();
QMap<QString, QString> datastoreEntries = widgetItem->datastoreEntries(); QMap<QString, QString> datastoreEntries = widgetItem->datastoreEntries();
QString startFileName = widgetItem->w3cWidget()->mainHtmlFileName(); QString startFileName = widgetItem->mainHtmlFileName();
if (!startFileName.startsWith("http://")) if (!startFileName.startsWith("http://"))
{ {
@ -394,18 +394,18 @@ void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *
lines << " <script type=\"text/javascript\">"; lines << " <script type=\"text/javascript\">";
lines << " var widget = {};"; lines << " var widget = {};";
lines << " widget.id = '" + widgetItem->w3cWidget()->metadatas().id + "';"; lines << " widget.id = '" + widgetItem->metadatas().id + "';";
lines << " widget.name = '" + widgetItem->w3cWidget()->metadatas().name + "';"; lines << " widget.name = '" + widgetItem->metadatas().name + "';";
lines << " widget.description = '" + widgetItem->w3cWidget()->metadatas().description + "';"; lines << " widget.description = '" + widgetItem->metadatas().description + "';";
lines << " widget.author = '" + widgetItem->w3cWidget()->metadatas().author + "';"; lines << " widget.author = '" + widgetItem->metadatas().author + "';";
lines << " widget.authorEmail = '" + widgetItem->w3cWidget()->metadatas().authorEmail + "';"; lines << " widget.authorEmail = '" + widgetItem->metadatas().authorEmail + "';";
lines << " widget.authorHref = '" + widgetItem->w3cWidget()->metadatas().authorHref + "';"; lines << " widget.authorHref = '" + widgetItem->metadatas().authorHref + "';";
lines << " widget.version = '" + widgetItem->w3cWidget()->metadatas().version + "';"; lines << " widget.version = '" + widgetItem->metadatas().version + "';";
lines << " widget.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "';"; lines << " widget.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "';";
lines << " widget.width = " + QString("%1").arg(widgetItem->w3cWidget()->width()) + ";"; lines << " widget.width = " + QString("%1").arg(widgetItem->nominalSize().width()) + ";";
lines << " widget.height = " + QString("%1").arg(widgetItem->w3cWidget()->height()) + ";"; lines << " widget.height = " + QString("%1").arg(widgetItem->nominalSize().height()) + ";";
lines << " widget.openUrl = function(url) { window.open(url); }"; lines << " widget.openUrl = function(url) { window.open(url); }";
lines << " widget.preferences = new Array()"; lines << " widget.preferences = new Array()";

@ -30,25 +30,14 @@
#include "core/memcheck.h" #include "core/memcheck.h"
UBW3CWidgetAPI::UBW3CWidgetAPI(UBGraphicsW3CWidgetItem *graphicsWidget) UBW3CWidgetAPI::UBW3CWidgetAPI(UBGraphicsW3CWidgetItem *graphicsWidget, QObject *parent)
: QObject(graphicsWidget) : QObject(parent)
, mGraphicsW3CWidget(graphicsWidget) , mGraphicsW3CWidget(graphicsWidget)
, mW3CWidget(mGraphicsW3CWidget->w3cWidget())
{ {
mPreferencesAPI = new UBW3CWidgetPreferenceAPI(graphicsWidget); mPreferencesAPI = new UBW3CWidgetPreferenceAPI(graphicsWidget, parent);
} }
UBW3CWidgetAPI::UBW3CWidgetAPI(UBW3CWidget *widget)
: QObject(widget)
, mGraphicsW3CWidget(0)
, mW3CWidget(widget)
{
mPreferencesAPI = new UBW3CWidgetPreferenceAPI(widget);
}
UBW3CWidgetAPI::~UBW3CWidgetAPI() UBW3CWidgetAPI::~UBW3CWidgetAPI()
{ {
// NOOP // NOOP
@ -66,55 +55,55 @@ QString UBW3CWidgetAPI::uuid()
int UBW3CWidgetAPI::width() int UBW3CWidgetAPI::width()
{ {
return mW3CWidget->geometry().width(); return mGraphicsW3CWidget->nominalSize().width();
} }
int UBW3CWidgetAPI::height() int UBW3CWidgetAPI::height()
{ {
return mW3CWidget->geometry().height(); return mGraphicsW3CWidget->nominalSize().height();
} }
QString UBW3CWidgetAPI::id() QString UBW3CWidgetAPI::id()
{ {
return mW3CWidget->metadatas().id; return mGraphicsW3CWidget->metadatas().id;
} }
QString UBW3CWidgetAPI::name() QString UBW3CWidgetAPI::name()
{ {
return mW3CWidget->metadatas().name; return mGraphicsW3CWidget->metadatas().name;
} }
QString UBW3CWidgetAPI::description() QString UBW3CWidgetAPI::description()
{ {
return mW3CWidget->metadatas().description; return mGraphicsW3CWidget->metadatas().description;
} }
QString UBW3CWidgetAPI::author() QString UBW3CWidgetAPI::author()
{ {
return mW3CWidget->metadatas().author; return mGraphicsW3CWidget->metadatas().author;
} }
QString UBW3CWidgetAPI::authorEmail() QString UBW3CWidgetAPI::authorEmail()
{ {
return mW3CWidget->metadatas().authorEmail; return mGraphicsW3CWidget->metadatas().authorEmail;
} }
QString UBW3CWidgetAPI::authorHref() QString UBW3CWidgetAPI::authorHref()
{ {
return mW3CWidget->metadatas().authorHref; return mGraphicsW3CWidget->metadatas().authorHref;
} }
QString UBW3CWidgetAPI::version() QString UBW3CWidgetAPI::version()
{ {
return mW3CWidget->metadatas().version; return mGraphicsW3CWidget->metadatas().version;
} }
QObject* UBW3CWidgetAPI::preferences() QObject* UBW3CWidgetAPI::preferences()
@ -129,24 +118,13 @@ void UBW3CWidgetAPI::openURL(const QString& url)
} }
UBW3CWidgetPreferenceAPI::UBW3CWidgetPreferenceAPI(UBGraphicsW3CWidgetItem *graphicsWidget) UBW3CWidgetPreferenceAPI::UBW3CWidgetPreferenceAPI(UBGraphicsW3CWidgetItem *graphicsWidget, QObject *parent)
: UBW3CWebStorage(graphicsWidget) : UBW3CWebStorage(parent)
, mGraphicsW3CWidget(graphicsWidget) , mGraphicsW3CWidget(graphicsWidget)
, mW3CWidget(graphicsWidget->w3cWidget())
{ {
// NOOP // NOOP
} }
UBW3CWidgetPreferenceAPI::UBW3CWidgetPreferenceAPI(UBW3CWidget *widget)
: UBW3CWebStorage(widget)
, mGraphicsW3CWidget(0)
, mW3CWidget(widget)
{
// NOOP
}
UBW3CWidgetPreferenceAPI::~UBW3CWidgetPreferenceAPI() UBW3CWidgetPreferenceAPI::~UBW3CWidgetPreferenceAPI()
{ {
// NOOP // NOOP
@ -155,45 +133,35 @@ UBW3CWidgetPreferenceAPI::~UBW3CWidgetPreferenceAPI()
QString UBW3CWidgetPreferenceAPI::key(int index) QString UBW3CWidgetPreferenceAPI::key(int index)
{ {
QMap<QString, UBW3CWidget::PreferenceValue> w3CPrefs = mW3CWidget->preferences(); QMap<QString, UBGraphicsW3CWidgetItem::PreferenceValue> w3CPrefs = mGraphicsW3CWidget->preferences();
if (index < w3CPrefs.size())
return w3CPrefs.keys().at(index);
else
return "";
if (index < w3CPrefs.size())
return w3CPrefs.keys().at(index);
else
return "";
} }
QString UBW3CWidgetPreferenceAPI::getItem(const QString& key) QString UBW3CWidgetPreferenceAPI::getItem(const QString& key)
{ {
if (mGraphicsW3CWidget) if (mGraphicsW3CWidget) {
{ QMap<QString, QString> docPref = mGraphicsW3CWidget->UBGraphicsWidgetItem::preferences();
QMap<QString, QString> docPref = mGraphicsW3CWidget->preferences(); if (docPref.contains(key))
return docPref.value(key);
if (docPref.contains(key))
return docPref.value(key);
}
QMap<QString, UBW3CWidget::PreferenceValue> w3cPrefs = mW3CWidget->preferences();
if (w3cPrefs.contains(key)) QMap<QString, UBGraphicsW3CWidgetItem::PreferenceValue> w3cPrefs = mGraphicsW3CWidget->preferences();
{
UBW3CWidget::PreferenceValue pref = w3cPrefs.value(key);
return pref.value;
}
else
{
return "";
}
if (w3cPrefs.contains(key)) {
UBGraphicsW3CWidgetItem::PreferenceValue pref = w3cPrefs.value(key);
return pref.value;
}
}
return QString();
} }
int UBW3CWidgetPreferenceAPI::length() int UBW3CWidgetPreferenceAPI::length()
{ {
QMap<QString, UBW3CWidget::PreferenceValue> w3cPrefs = mW3CWidget->preferences(); QMap<QString, UBGraphicsW3CWidgetItem::PreferenceValue> w3cPrefs = mGraphicsW3CWidget->preferences();
return w3cPrefs.size(); return w3cPrefs.size();
} }
@ -201,39 +169,28 @@ int UBW3CWidgetPreferenceAPI::length()
void UBW3CWidgetPreferenceAPI::setItem(const QString& key, const QString& value) void UBW3CWidgetPreferenceAPI::setItem(const QString& key, const QString& value)
{ {
if (mGraphicsW3CWidget) if (mGraphicsW3CWidget) {
{ QMap<QString, UBGraphicsW3CWidgetItem::PreferenceValue> w3cPrefs = mGraphicsW3CWidget->preferences();
QMap<QString, UBW3CWidget::PreferenceValue> w3cPrefs = mW3CWidget->preferences();
if (w3cPrefs.contains(key) && !w3cPrefs.value(key).readonly) if (w3cPrefs.contains(key) && !w3cPrefs.value(key).readonly)
mGraphicsW3CWidget->setPreference(key, value); mGraphicsW3CWidget->setPreference(key, value);
} }
else
{
// No state for non graphics widget (aka tool widget)
}
} }
void UBW3CWidgetPreferenceAPI::removeItem(const QString& key) void UBW3CWidgetPreferenceAPI::removeItem(const QString& key)
{ {
if (mGraphicsW3CWidget) if (mGraphicsW3CWidget)
mGraphicsW3CWidget->removePreference(key); mGraphicsW3CWidget->removePreference(key);
else
{
// No state for non graphics widget (aka tool widget)
}
} }
void UBW3CWidgetPreferenceAPI::clear() void UBW3CWidgetPreferenceAPI::clear()
{ {
if (mGraphicsW3CWidget) if (mGraphicsW3CWidget)
mGraphicsW3CWidget->removeAllPreferences(); mGraphicsW3CWidget->removeAllPreferences();
else
{
// No state for non graphics widget (aka tool widget)
}
} }

@ -47,8 +47,7 @@ class UBW3CWidgetAPI : public QObject
public: public:
UBW3CWidgetAPI(UBGraphicsW3CWidgetItem *graphicsWidget); UBW3CWidgetAPI(UBGraphicsW3CWidgetItem *graphicsWidget, QObject *parent = 0);
UBW3CWidgetAPI(UBW3CWidget *widget);
virtual ~UBW3CWidgetAPI(); virtual ~UBW3CWidgetAPI();
@ -72,7 +71,6 @@ class UBW3CWidgetAPI : public QObject
private: private:
UBGraphicsW3CWidgetItem* mGraphicsW3CWidget; UBGraphicsW3CWidgetItem* mGraphicsW3CWidget;
UBW3CWidget *mW3CWidget;
UBW3CWidgetPreferenceAPI* mPreferencesAPI; UBW3CWidgetPreferenceAPI* mPreferencesAPI;
@ -88,8 +86,8 @@ class UBW3CWebStorage : public QObject
public: public:
UBW3CWebStorage(QObject *parent = 0) UBW3CWebStorage(QObject *parent = 0)
: QObject(parent){} : QObject(parent){/* NOOP */}
virtual ~UBW3CWebStorage(){} virtual ~UBW3CWebStorage(){/* NOOP */}
public slots: public slots:
@ -110,8 +108,7 @@ class UBW3CWidgetPreferenceAPI : public UBW3CWebStorage
Q_OBJECT; Q_OBJECT;
public: public:
UBW3CWidgetPreferenceAPI(UBGraphicsW3CWidgetItem *graphicsWidget); UBW3CWidgetPreferenceAPI(UBGraphicsW3CWidgetItem *graphicsWidget, QObject *parent = 0);
UBW3CWidgetPreferenceAPI(UBW3CWidget *widget);
virtual ~UBW3CWidgetPreferenceAPI(); virtual ~UBW3CWidgetPreferenceAPI();
@ -129,7 +126,6 @@ class UBW3CWidgetPreferenceAPI : public UBW3CWebStorage
private: private:
UBGraphicsW3CWidgetItem* mGraphicsW3CWidget; UBGraphicsW3CWidgetItem* mGraphicsW3CWidget;
UBW3CWidget* mW3CWidget;
}; };

@ -17,16 +17,15 @@
#include "core/UBApplication.h" #include "core/UBApplication.h"
#include "domain/UBAbstractWidget.h" #include "domain/UBGraphicsWebView.h"
#include "core/memcheck.h" #include "core/memcheck.h"
UBWidgetMessageAPI::UBWidgetMessageAPI(UBW3CWidget *widget) UBWidgetMessageAPI::UBWidgetMessageAPI(UBGraphicsWidgetItem *graphicsWidgetItem, QObject *parent)
: QObject(widget) : QObject(parent)
, mWebWidget(widget) , mGraphicsWidgetItem(graphicsWidgetItem)
{ {
connect(UBWidgetAPIMessageBroker::instance(), SIGNAL(newMessage(const QString&, const QString&)) connect(UBWidgetAPIMessageBroker::instance(), SIGNAL(newMessage(const QString&, const QString&)), this, SLOT(onNewMessage(const QString&, const QString&)), Qt::QueuedConnection);
, this, SLOT(onNewMessage(const QString&, const QString&)), Qt::QueuedConnection);
} }
UBWidgetMessageAPI::~UBWidgetMessageAPI() UBWidgetMessageAPI::~UBWidgetMessageAPI()
@ -45,9 +44,7 @@ void UBWidgetMessageAPI::onNewMessage(const QString& pTopicName, const QString&
{ {
if (mSubscribedTopics.contains(pTopicName)) if (mSubscribedTopics.contains(pTopicName))
{ {
if (mWebWidget if (mGraphicsWidgetItem && mGraphicsWidgetItem->page() && mGraphicsWidgetItem->page()->mainFrame())
&& mWebWidget->page()
&& mWebWidget->page()->mainFrame())
{ {
QString js; QString js;
@ -55,7 +52,7 @@ void UBWidgetMessageAPI::onNewMessage(const QString& pTopicName, const QString&
js += "{widget.messages.onmessage('"; js += "{widget.messages.onmessage('";
js += pMessage + "', '" + pTopicName + "')}"; js += pMessage + "', '" + pTopicName + "')}";
mWebWidget->page()-> mGraphicsWidgetItem->page()->
mainFrame()->evaluateJavaScript(js); mainFrame()->evaluateJavaScript(js);
} }

@ -25,7 +25,7 @@ class UBWidgetMessageAPI : public QObject
Q_OBJECT; Q_OBJECT;
public: public:
UBWidgetMessageAPI(UBW3CWidget *widget); UBWidgetMessageAPI(UBGraphicsWidgetItem *graphicsWidgetItem, QObject *parent = 0);
virtual ~UBWidgetMessageAPI(); virtual ~UBWidgetMessageAPI();
public slots: public slots:
@ -49,7 +49,7 @@ class UBWidgetMessageAPI : public QObject
private: private:
QSet<QString> mSubscribedTopics; QSet<QString> mSubscribedTopics;
UBW3CWidget *mWebWidget; UBGraphicsWidgetItem *mGraphicsWidgetItem;
}; };

@ -30,7 +30,6 @@
#include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsWidgetItem.h" #include "domain/UBGraphicsWidgetItem.h"
#include "domain/UBAbstractWidget.h"
#include "adaptors/UBThumbnailAdaptor.h" #include "adaptors/UBThumbnailAdaptor.h"
@ -79,7 +78,7 @@ UBWidgetUniboardAPI::UBWidgetUniboardAPI(UBGraphicsScene *pScene, UBGraphicsWidg
if (w3CGraphicsWidget) if (w3CGraphicsWidget)
{ {
mMessagesAPI = new UBWidgetMessageAPI(w3CGraphicsWidget->w3cWidget()); mMessagesAPI = new UBWidgetMessageAPI(w3CGraphicsWidget);
mDatastoreAPI = new UBDatastoreAPI(w3CGraphicsWidget); mDatastoreAPI = new UBDatastoreAPI(w3CGraphicsWidget);
} }
@ -547,7 +546,7 @@ void UBWidgetUniboardAPI::ProcessDropEvent(QDropEvent *event)
QDropEvent readyEvent(dropPoint, dropActions, &dropMimeData, dropMouseButtons, dropModifiers); QDropEvent readyEvent(dropPoint, dropActions, &dropMimeData, dropMouseButtons, dropModifiers);
//sending event to destination either it had been downloaded or not //sending event to destination either it had been downloaded or not
QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&readyEvent); QApplication::sendEvent(mGraphicsWidget,&readyEvent);
readyEvent.acceptProposedAction(); readyEvent.acceptProposedAction();
} }
@ -602,11 +601,11 @@ void UBWidgetUniboardAPI::onDownloadFinished(bool pSuccess, sDownloadFileDesc de
//To make js interpreter accept drop event we need to generate move event first. //To make js interpreter accept drop event we need to generate move event first.
QDragMoveEvent pseudoMove(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers); QDragMoveEvent pseudoMove(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers);
QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&pseudoMove); QApplication::sendEvent(mGraphicsWidget,&pseudoMove);
QDropEvent readyEvent(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers); QDropEvent readyEvent(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers);
//sending event to destination either it had been downloaded or not //sending event to destination either it had been downloaded or not
QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&readyEvent); QApplication::sendEvent(mGraphicsWidget,&readyEvent);
readyEvent.acceptProposedAction(); readyEvent.acceptProposedAction();
} }
@ -736,9 +735,9 @@ void UBDocumentDatastoreAPI::removeItem(const QString& key)
{ {
mGraphicsW3CWidget->removeDatastoreEntry(key); mGraphicsW3CWidget->removeDatastoreEntry(key);
} }
void
UBDocumentDatastoreAPI::clear()
void UBDocumentDatastoreAPI::clear()
{ {
mGraphicsW3CWidget->removeAllDatastoreEntries(); mGraphicsW3CWidget->removeAllDatastoreEntries();
} }

@ -49,7 +49,6 @@
#include "domain/UBGraphicsWidgetItem.h" #include "domain/UBGraphicsWidgetItem.h"
#include "domain/UBGraphicsMediaItem.h" #include "domain/UBGraphicsMediaItem.h"
#include "domain/UBGraphicsPDFItem.h" #include "domain/UBGraphicsPDFItem.h"
#include "domain/UBW3CWidget.h"
#include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsTextItem.h"
#include "domain/UBPageSizeUndoCommand.h" #include "domain/UBPageSizeUndoCommand.h"
#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsGroupContainerItem.h"
@ -955,12 +954,12 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
if (!pSuccess) if (!pSuccess)
{ {
UBApplication::showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString())); showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString()));
return NULL; return NULL;
} }
if (!sourceUrl.toString().startsWith("file://") && !sourceUrl.toString().startsWith("uniboardTool://")) if (!sourceUrl.toString().startsWith("file://") && !sourceUrl.toString().startsWith("uniboardTool://"))
UBApplication::showMessage(tr("Download finished")); showMessage(tr("Download finished"));
if (UBMimeType::RasterImage == itemMimeType) if (UBMimeType::RasterImage == itemMimeType)
{ {
@ -1151,7 +1150,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
else else
size = mActiveScene->nominalSize() * .8; size = mActiveScene->nominalSize() * .8;
QString widgetUrl = UBW3CWidget::createNPAPIWrapper(sUrl, mimeType, size); QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(sUrl, mimeType, size);
if (widgetUrl.length() > 0) if (widgetUrl.length() > 0)
{ {
@ -1238,7 +1237,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
} }
else else
{ {
UBApplication::showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString())); showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString()));
} }
} }
else if (sourceUrl.toString().contains("edumedia-sciences.com")) else if (sourceUrl.toString().contains("edumedia-sciences.com"))
@ -1274,7 +1273,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
else else
size = mActiveScene->nominalSize() * .8; size = mActiveScene->nominalSize() * .8;
QString widgetUrl = UBW3CWidget::createNPAPIWrapper(swfFile, "application/x-shockwave-flash", size); QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(swfFile, "application/x-shockwave-flash", size);
if (widgetUrl.length() > 0) if (widgetUrl.length() > 0)
{ {
@ -1293,7 +1292,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
} }
else else
{ {
UBApplication::showMessage(tr("Unknown content type %1").arg(pContentTypeHeader)); showMessage(tr("Unknown content type %1").arg(pContentTypeHeader));
qWarning() << "ignoring mime type" << pContentTypeHeader ; qWarning() << "ignoring mime type" << pContentTypeHeader ;
} }
@ -1485,8 +1484,12 @@ void UBBoardController::boardViewResized(QResizeEvent* event)
mControlView->centerOn(0,0); mControlView->centerOn(0,0);
if (mDisplayView)
mDisplayView->centerOn(0,0);
mPaletteManager->containerResized(); mPaletteManager->containerResized();
UBApplication::boardController->controlView()->scene()->moveMagnifier();
} }
@ -1655,52 +1658,15 @@ qreal UBBoardController::currentZoom()
return 1.0; return 1.0;
} }
UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl)
{
return addTool(toolUrl, mControlView->mapToScene(mControlView->rect().center()));
}
UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl, QPointF scenePos)
{
UBToolWidget *toolWidget = new UBToolWidget(toolUrl, mMainWindow); // Deleted in UBBoardController::removeTool
QPoint pos = mControlView->mapToGlobal(mControlView->mapFromScene(scenePos));
pos -= QPoint(toolWidget->width() / 2, toolWidget->height() / 2);
toolWidget->move(pos);
mTools.append(toolWidget);
toolWidget->show();
return toolWidget;
}
void UBBoardController::removeTool(UBToolWidget* toolWidget)
{
toolWidget->hide();
mTools.removeAll(toolWidget);
delete toolWidget;
}
void UBBoardController::hide() void UBBoardController::hide()
{ {
UBApplication::mainWindow->actionLibrary->setChecked(false); UBApplication::mainWindow->actionLibrary->setChecked(false);
controlViewHidden();
} }
void UBBoardController::show() void UBBoardController::show()
{ {
UBApplication::mainWindow->actionLibrary->setChecked(false); UBApplication::mainWindow->actionLibrary->setChecked(false);
controlViewShown();
} }
@ -1925,25 +1891,6 @@ void UBBoardController::grabScene(const QRectF& pSceneRect)
} }
} }
void UBBoardController::controlViewHidden()
{
foreach(UBToolWidget* tool, mTools)
{
tool->hide();
}
}
void UBBoardController::controlViewShown()
{
foreach(UBToolWidget* tool, mTools)
{
tool->show();
}
}
UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos) UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos)
{ {
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
@ -2003,7 +1950,7 @@ UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QP
w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath)); w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath));
UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem); UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem);
if (tmpItem) if (tmpItem)
tmpItem->widgetWebView()->takeSnapshot().save(snapshotPath, "PNG"); tmpItem->takeSnapshot().save(snapshotPath, "PNG");
} }
@ -2208,56 +2155,23 @@ void UBBoardController::togglePodcast(bool checked)
void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget) void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget)
{ {
QPoint controlViewPos = mControlView->mapFromScene(graphicsWidget->sceneBoundingRect().center()); graphicsWidget->remove();
graphicsWidget->setSelected(false);
UBAbstractWidget *aw = graphicsWidget->widgetWebView();
graphicsWidget->setWidget(0);
UBToolWidget *toolWidget = new UBToolWidget(aw, mControlContainer); UBToolWidget *toolWidget = new UBToolWidget(graphicsWidget);
mActiveScene->addItem(toolWidget);
qreal ssf = 1 / UBApplication::boardController->systemScaleFactor();
graphicsWidget->scene()->removeItem(graphicsWidget); // TODO UB 4.6 probably leaking the frame toolWidget->setScale(ssf);
toolWidget->setPos(graphicsWidget->scenePos());
toolWidget->centerOn(mControlView->mapTo(mControlContainer, controlViewPos));
toolWidget->show();
} }
void UBBoardController::moveToolWidgetToScene(UBToolWidget* toolWidget) void UBBoardController::moveToolWidgetToScene(UBToolWidget* toolWidget)
{ {
int xIsOdd = toolWidget->width() % 2; UBGraphicsWidgetItem *graphicsWidgetItem = addW3cWidget(toolWidget->graphicsWidgetItem()->widgetUrl(), QPointF(0, 0));
int yIsOdd = toolWidget->height() % 2; graphicsWidgetItem->setPos(toolWidget->pos());
toolWidget->remove();
QPoint mainWindowCenter = toolWidget->mapTo(mMainWindow, QPoint(toolWidget->width(), toolWidget->height()) / 2); graphicsWidgetItem->setSelected(true);
UBAbstractWidget* webWidget = toolWidget->webWidget();
webWidget->setParent(0);
UBGraphicsWidgetItem* graphicsWidget = 0;
UBW3CWidget* w3cWidget = qobject_cast<UBW3CWidget*>(webWidget);
if (w3cWidget)
{
graphicsWidget = new UBGraphicsW3CWidgetItem(w3cWidget);
}
else
{
UBAppleWidget* appleWidget = qobject_cast<UBAppleWidget*>(webWidget);
if (appleWidget)
{
graphicsWidget = new UBGraphicsAppleWidgetItem(appleWidget);
}
}
QPoint controlViewCenter = mControlView->mapFrom(mMainWindow, mainWindowCenter);
QPointF scenePos = mControlView->mapToScene(controlViewCenter) + QPointF(xIsOdd * 0.5, yIsOdd * 0.5);
mActiveScene->addGraphicsWidget(graphicsWidget, scenePos);
toolWidget->hide();
toolWidget->deleteLater();
} }
@ -2343,8 +2257,8 @@ void UBBoardController::freezeW3CWidget(QGraphicsItem *item, bool freeze)
return; return;
if (freeze) { if (freeze) {
item_casted->widgetWebView()->load(QUrl(item_casted->w3cWidget()->freezedWidgetFilePath())); item_casted->load(QUrl(UBGraphicsW3CWidgetItem::freezedWidgetFilePath()));
}else } else
item_casted->widgetWebView()->loadMainHtml(); item_casted->loadMainHtml();
} }
} }

@ -193,21 +193,16 @@ class UBBoardController : public UBDocumentContainer
UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QString pHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground = false); UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QString pHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground = false);
void changeBackground(bool isDark, bool isCrossed); void changeBackground(bool isDark, bool isCrossed);
void setToolCursor(int tool); void setToolCursor(int tool);
void showMessage(const QString& message, bool showSpinningWheel); void showMessage(const QString& message, bool showSpinningWheel = false);
void hideMessage(); void hideMessage();
void setDisabled(bool disable); void setDisabled(bool disable);
void setColorIndex(int pColorIndex); void setColorIndex(int pColorIndex);
UBToolWidget* addTool(const QUrl& toolUrl, QPointF scenePos);
UBToolWidget* addTool(const QUrl& toolUrl);
void removeTool(UBToolWidget* toolWidget);
void hide(); void hide();
void show(); void show();
void setWidePageSize(bool checked); void setWidePageSize(bool checked);
void setRegularPageSize(bool checked); void setRegularPageSize(bool checked);
void stylusToolChanged(int tool); void stylusToolChanged(int tool);
void grabScene(const QRectF& pSceneRect); void grabScene(const QRectF& pSceneRect);
void controlViewHidden();
void controlViewShown();
UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos); UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos);
UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos); UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos);
UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos); UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos);
@ -277,7 +272,6 @@ class UBBoardController : public UBDocumentContainer
QColor mPenColorOnLightBackground; QColor mPenColorOnLightBackground;
QColor mMarkerColorOnDarkBackground; QColor mMarkerColorOnDarkBackground;
QColor mMarkerColorOnLightBackground; QColor mMarkerColorOnLightBackground;
QList<UBToolWidget*> mTools;
qreal mSystemScaleFactor; qreal mSystemScaleFactor;
bool mCleanupDone; bool mCleanupDone;
QMap<QAction*, QPair<QString, QString> > mActionTexts; QMap<QAction*, QPair<QString, QString> > mActionTexts;

@ -48,7 +48,6 @@
#include "network/UBServerXMLHttpRequest.h" #include "network/UBServerXMLHttpRequest.h"
#include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsScene.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBGraphicsPixmapItem.h" #include "domain/UBGraphicsPixmapItem.h"
#include "document/UBDocumentProxy.h" #include "document/UBDocumentProxy.h"
@ -678,8 +677,10 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is
{ {
case eUBDockPaletteWidget_BOARD: case eUBDockPaletteWidget_BOARD:
{ {
mLeftPalette->assignParent(UBApplication::boardController->controlContainer()); mLeftPalette->assignParent(mContainer);
mRightPalette->assignParent(UBApplication::boardController->controlContainer()); mRightPalette->assignParent(mContainer);
mRightPalette->stackUnder(mStylusPalette);
mLeftPalette->stackUnder(mStylusPalette);
if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
{ {
@ -711,6 +712,8 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is
{ {
mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
mRightPalette->lower();
mLeftPalette->lower();
if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
{ {

@ -19,7 +19,6 @@
#include <QtGui> #include <QtGui>
#include <QtWebKit> #include <QtWebKit>
#include "web/UBRoutedMouseEventWebView.h"
#include "gui/UBLeftPalette.h" #include "gui/UBLeftPalette.h"
#include "gui/UBRightPalette.h" #include "gui/UBRightPalette.h"
#include "gui/UBPageNavigationWidget.h" #include "gui/UBPageNavigationWidget.h"

@ -71,6 +71,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent)
, suspendedMousePressEvent(NULL) , suspendedMousePressEvent(NULL)
, mLongPressInterval(1000) , mLongPressInterval(1000)
, mIsDragInProgress(false) , mIsDragInProgress(false)
, mMultipleSelectionIsEnabled(false)
{ {
init (); init ();
@ -86,6 +87,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, int pStartLayer, int p
, suspendedMousePressEvent(NULL) , suspendedMousePressEvent(NULL)
, mLongPressInterval(1000) , mLongPressInterval(1000)
, mIsDragInProgress(false) , mIsDragInProgress(false)
, mMultipleSelectionIsEnabled(false)
{ {
init (); init ();
@ -123,8 +125,6 @@ UBBoardView::init ()
setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
setAcceptDrops (true); setAcceptDrops (true);
setOptimizationFlag (QGraphicsView::IndirectPainting); // enable UBBoardView::drawItems filter
mTabletStylusIsPressed = false; mTabletStylusIsPressed = false;
mMouseButtonIsPressed = false; mMouseButtonIsPressed = false;
mPendingStylusReleaseEvent = false; mPendingStylusReleaseEvent = false;
@ -208,6 +208,11 @@ UBBoardView::keyPressEvent (QKeyEvent *event)
mController->addScene (); mController->addScene ();
break; break;
} }
case Qt::Key_Control:
case Qt::Key_Shift:
{
mMultipleSelectionIsEnabled = true;
}break;
} }
@ -268,6 +273,21 @@ UBBoardView::keyPressEvent (QKeyEvent *event)
} }
} }
void UBBoardView::keyReleaseEvent(QKeyEvent *event)
{
// if (!event->isAccepted ())
{
if (Qt::Key_Shift == event->key()
||Qt::Key_Control == event->key())
{
mMultipleSelectionIsEnabled = false;
}
}
QGraphicsView::keyReleaseEvent(event);
}
bool bool
UBBoardView::event (QEvent * e) UBBoardView::event (QEvent * e)
{ {
@ -426,7 +446,10 @@ bool UBBoardView::itemShouldReceiveMousePressEvent(QGraphicsItem *item)
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool(); UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
if ((currentTool == UBStylusTool::Play) && UBGraphicsGroupContainerItem::Type == movingItem->type()) if ((currentTool == UBStylusTool::Play) && UBGraphicsGroupContainerItem::Type == movingItem->type())
return movingItem = NULL; {
movingItem = NULL;
return false;
}
switch(item->type()) switch(item->type())
{ {
@ -534,11 +557,7 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item)
return true; return true;
case UBGraphicsTextItem::Type: case UBGraphicsTextItem::Type:
return !item->isSelected(); return !item->isSelected();
default:
false;
} }
return false; return false;
} }
@ -579,7 +598,8 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event)
if (movingItem && QGraphicsSvgItem::Type != movingItem->type() if (movingItem && QGraphicsSvgItem::Type != movingItem->type()
&& UBGraphicsDelegateFrame::Type != movingItem->type()) && UBGraphicsDelegateFrame::Type != movingItem->type()
&& !mMultipleSelectionIsEnabled)
{ {
foreach(QGraphicsItem *item, scene()->selectedItems()) foreach(QGraphicsItem *item, scene()->selectedItems())
{ {
@ -590,6 +610,9 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event)
} }
} }
if (mMultipleSelectionIsEnabled)
return;
if (itemShouldReceiveMousePressEvent(movingItem)) if (itemShouldReceiveMousePressEvent(movingItem))
QGraphicsView::mousePressEvent (event); QGraphicsView::mousePressEvent (event);
else else
@ -947,6 +970,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
if (currentTool == UBStylusTool::Selector) if (currentTool == UBStylusTool::Selector)
{ {
bool bReleaseIsNeed = true;
if (mWidgetMoved) if (mWidgetMoved)
{ {
mWidgetMoved = false; mWidgetMoved = false;
@ -964,9 +988,22 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
} }
else else
{ {
if ( QGraphicsSvgItem::Type != movingItem->type() if (QGraphicsSvgItem::Type != movingItem->type() &&
&& UBGraphicsDelegateFrame::Type != movingItem->type()) UBGraphicsDelegateFrame::Type != movingItem->type() &&
movingItem->setSelected(true); UBToolWidget::Type != movingItem->type())
{
bReleaseIsNeed = false;
if (movingItem->isSelected() && mMultipleSelectionIsEnabled)
movingItem->setSelected(false);
else
{
if (movingItem->isSelected())
bReleaseIsNeed = true;
movingItem->setSelected(true);
}
}
} }
} }
@ -974,7 +1011,10 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
mUBRubberBand->hide(); mUBRubberBand->hide();
} }
QGraphicsView::mouseReleaseEvent (event); if (bReleaseIsNeed)
{
QGraphicsView::mouseReleaseEvent (event);
}
} }
else if (currentTool == UBStylusTool::Play) else if (currentTool == UBStylusTool::Play)
{ {
@ -992,9 +1032,8 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
delete suspendedMousePressEvent; delete suspendedMousePressEvent;
suspendedMousePressEvent = NULL; suspendedMousePressEvent = NULL;
} }
QGraphicsView::mouseReleaseEvent (event);
} }
QGraphicsView::mouseReleaseEvent (event);
} }
else if (currentTool == UBStylusTool::Text) else if (currentTool == UBStylusTool::Text)
{ {
@ -1182,7 +1221,7 @@ void UBBoardView::dragMoveEvent (QDragMoveEvent *event)
} }
QPoint newPoint(graphicsWidget->mapFromScene(mapToScene(event->pos())).toPoint()); QPoint newPoint(graphicsWidget->mapFromScene(mapToScene(event->pos())).toPoint());
QDragMoveEvent newEvent(newPoint, event->dropAction(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers()); QDragMoveEvent newEvent(newPoint, event->dropAction(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers());
QApplication::sendEvent(graphicsWidget->widgetWebView(),&newEvent); QApplication::sendEvent(graphicsWidget,&newEvent);
} else { } else {
mOkOnWidget = false; mOkOnWidget = false;
event->ignore(); event->ignore();

@ -21,7 +21,6 @@
#include "domain/UBGraphicsDelegateFrame.h" #include "domain/UBGraphicsDelegateFrame.h"
class UBBoardController; class UBBoardController;
class UBAppleWidget;
class UBGraphicsScene; class UBGraphicsScene;
class UBGraphicsWidgetItem; class UBGraphicsWidgetItem;
class UBRubberBand; class UBRubberBand;
@ -66,6 +65,7 @@ class UBBoardView : public QGraphicsView
virtual bool event (QEvent * e); virtual bool event (QEvent * e);
virtual void keyPressEvent(QKeyEvent *event); virtual void keyPressEvent(QKeyEvent *event);
virtual void keyReleaseEvent(QKeyEvent *event);
virtual void tabletEvent(QTabletEvent * event); virtual void tabletEvent(QTabletEvent * event);
virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mousePressEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event);
@ -146,6 +146,7 @@ class UBBoardView : public QGraphicsView
QTimer mLongPressTimer; QTimer mLongPressTimer;
bool mIsDragInProgress; bool mIsDragInProgress;
bool mMultipleSelectionIsEnabled;
private slots: private slots:

@ -11,7 +11,6 @@
#include "frameworks/UBPlatformUtils.h" #include "frameworks/UBPlatformUtils.h"
#include "core/UBDownloadManager.h" #include "core/UBDownloadManager.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsSvgItem.h" #include "domain/UBGraphicsSvgItem.h"
#include "domain/UBGraphicsPixmapItem.h" #include "domain/UBGraphicsPixmapItem.h"
@ -24,6 +23,7 @@ const QString UBFeaturesController::virtualRootName = "root";
void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet) void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet)
{ {
Q_ASSERT(QFileInfo(currentPath.toLocalFile()).exists()); Q_ASSERT(QFileInfo(currentPath.toLocalFile()).exists());
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile()); QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile());
@ -527,7 +527,7 @@ QImage UBFeaturesController::getIcon(const QString &path, UBFeatureElementType p
if (pFType == FEATURE_FOLDER) { if (pFType == FEATURE_FOLDER) {
return QImage(":images/libpalette/folder.svg"); return QImage(":images/libpalette/folder.svg");
} else if (pFType == FEATURE_INTERACTIVE || pFType == FEATURE_SEARCH) { } else if (pFType == FEATURE_INTERACTIVE || pFType == FEATURE_SEARCH) {
return QImage(UBAbstractWidget::iconFilePath(QUrl::fromLocalFile(path))); return QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(path)));
} else if (pFType == FEATURE_INTERNAL) { } else if (pFType == FEATURE_INTERNAL) {
return QImage(UBToolsManager::manager()->iconFromToolId(path)); return QImage(UBToolsManager::manager()->iconFromToolId(path));
} else if (pFType == FEATURE_AUDIO) { } else if (pFType == FEATURE_AUDIO) {

@ -24,7 +24,6 @@
#include "core/UBApplicationController.h" #include "core/UBApplicationController.h"
#include "core/UBDownloadManager.h" #include "core/UBDownloadManager.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsSvgItem.h" #include "domain/UBGraphicsSvgItem.h"
#include "domain/UBGraphicsPixmapItem.h" #include "domain/UBGraphicsPixmapItem.h"
@ -325,7 +324,7 @@ QImage UBLibraryController::thumbnailForFile(UBLibElement* pElement)
return image; return image;
} }
if (pElement->type() == eUBLibElementType_InteractiveItem){ if (pElement->type() == eUBLibElementType_InteractiveItem){
QImage image = QImage(UBAbstractWidget::iconFilePath(pElement->path())); QImage image = QImage(UBGraphicsWidgetItem::iconFilePath(pElement->path()));
return image; return image;
} }
@ -780,7 +779,7 @@ UBLibElement::UBLibElement(eUBLibElementType type, const QUrl &path, const QStri
mThumbnail = QImage(":images/libpalette/folder.svg"); mThumbnail = QImage(":images/libpalette/folder.svg");
if (type == eUBLibElementType_InteractiveItem) if (type == eUBLibElementType_InteractiveItem)
mThumbnail = QImage(UBAbstractWidget::iconFilePath(path)); mThumbnail = QImage(UBGraphicsWidgetItem::iconFilePath(path));
if (type == eUBLibElementType_Item) if (type == eUBLibElementType_Item)
mExtension = QFileInfo(path.toLocalFile()).completeSuffix(); mExtension = QFileInfo(path.toLocalFile()).completeSuffix();

@ -142,7 +142,8 @@ struct UBGraphicsItemType
TriangleItemType, TriangleItemType,
MagnifierItemType, MagnifierItemType,
cacheItemType, cacheItemType,
groupContainerType groupContainerType,
ToolWidgetItemType
}; };
}; };

@ -33,6 +33,8 @@
#include "document/UBDocumentProxy.h" #include "document/UBDocumentProxy.h"
#include "document/UBDocumentController.h" #include "document/UBDocumentController.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "desktop/UBDesktopPalette.h" #include "desktop/UBDesktopPalette.h"
#include "desktop/UBDesktopAnnotationController.h" #include "desktop/UBDesktopAnnotationController.h"
@ -44,7 +46,6 @@
#include "gui/UBTeacherGuideWidget.h" #include "gui/UBTeacherGuideWidget.h"
#include "domain/UBGraphicsPixmapItem.h" #include "domain/UBGraphicsPixmapItem.h"
#include "domain/UBW3CWidget.h"
#include "podcast/UBPodcastController.h" #include "podcast/UBPodcastController.h"
@ -318,7 +319,7 @@ void UBApplicationController::addCapturedEmbedCode(const QString& embedCode)
int width = 300; int width = 300;
int height = 150; int height = 150;
QString widgetPath = UBW3CWidget::createHtmlWrapperInDir(embedCode, userWidgetDir, QString widgetPath = UBGraphicsW3CWidgetItem::createHtmlWrapperInDir(embedCode, userWidgetDir,
QSize(width, height), UBStringUtils::toCanonicalUuid(QUuid::createUuid())); QSize(width, height), UBStringUtils::toCanonicalUuid(QUuid::createUuid()));
if (widgetPath.length() > 0) if (widgetPath.length() > 0)

@ -385,7 +385,12 @@ void UBDocumentController::setupViews()
mDocumentUI->thumbnailWidget->setBackgroundBrush(UBSettings::documentViewLightColor); mDocumentUI->thumbnailWidget->setBackgroundBrush(UBSettings::documentViewLightColor);
mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget); #ifdef Q_WS_MACX
mMessageWindow = new UBMessageWindow(NULL);
#else
mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget);
#endif
mMessageWindow->hide(); mMessageWindow->hide();
} }
@ -623,7 +628,7 @@ void UBDocumentController::deleteSelectedItem()
toBeDeleted << proxyTi; toBeDeleted << proxyTi;
} }
UBApplication::showMessage(tr("Emptying trash")); showMessage(tr("Emptying trash"));
for (int i = 0; i < toBeDeleted.count(); i++) for (int i = 0; i < toBeDeleted.count(); i++)
{ {
@ -633,7 +638,7 @@ void UBDocumentController::deleteSelectedItem()
UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy()); UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
} }
UBApplication::showMessage(tr("Emptied trash")); showMessage(tr("Emptied trash"));
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
mMainWindow->actionDelete->setEnabled(false); mMainWindow->actionDelete->setEnabled(false);
@ -683,7 +688,7 @@ void UBDocumentController::deleteSelectedItem()
{ {
UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i); UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
UBApplication::showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())); showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString()));
// Move document to trash // Move document to trash
QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
@ -693,7 +698,7 @@ void UBDocumentController::deleteSelectedItem()
mTrashTi->addChild(proxyTi); mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
UBApplication::showMessage(QString("%1 deleted").arg(groupTi->groupName())); showMessage(QString("%1 deleted").arg(groupTi->groupName()));
} }
// dont remove default group // dont remove default group
@ -732,7 +737,7 @@ void UBDocumentController::exportDocument()
} }
else else
{ {
UBApplication::showMessage(tr("No document selected!")); showMessage(tr("No document selected!"));
} }
} }
@ -917,7 +922,7 @@ void UBDocumentController::importFile()
if (groupName == UBSettings::defaultDocumentGroupName || fileInfo.suffix() != "ubz") if (groupName == UBSettings::defaultDocumentGroupName || fileInfo.suffix() != "ubz")
groupName = ""; groupName = "";
UBApplication::showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
createdDocument = docManager->importFile(selectedFile, groupName); createdDocument = docManager->importFile(selectedFile, groupName);
@ -927,7 +932,7 @@ void UBDocumentController::importFile()
} }
else else
{ {
UBApplication::showMessage(tr("Failed to import file ... ")); showMessage(tr("Failed to import file ... "));
} }
} }
@ -958,7 +963,7 @@ void UBDocumentController::addFolderOfImages()
if (importedImageNumber == 0) if (importedImageNumber == 0)
{ {
UBApplication::showMessage(tr("Folder does not contain any image files!")); showMessage(tr("Folder does not contain any image files!"));
UBApplication::applicationController->showDocument(); UBApplication::applicationController->showDocument();
} }
else else
@ -1003,7 +1008,7 @@ bool UBDocumentController::addFileToDocument(UBDocumentProxy* document)
QApplication::processEvents(); QApplication::processEvents();
QFile selectedFile(filePath); QFile selectedFile(filePath);
UBApplication::showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
success = UBDocumentManager::documentManager()->addFileToDocument(document, selectedFile); success = UBDocumentManager::documentManager()->addFileToDocument(document, selectedFile);
@ -1014,7 +1019,7 @@ bool UBDocumentController::addFileToDocument(UBDocumentProxy* document)
} }
else else
{ {
UBApplication::showMessage(tr("Failed to import file ... ")); showMessage(tr("Failed to import file ... "));
} }
} }
@ -1382,13 +1387,19 @@ bool UBDocumentController::isOKToOpenDocument(UBDocumentProxy* proxy)
void UBDocumentController::showMessage(const QString& message, bool showSpinningWheel) void UBDocumentController::showMessage(const QString& message, bool showSpinningWheel)
{ {
int margin = UBSettings::boardMargin;
QRect newSize = mDocumentUI->thumbnailWidget->geometry();
if (mMessageWindow) if (mMessageWindow)
{ {
mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin); int margin = UBSettings::boardMargin;
QRect newSize = mDocumentUI->thumbnailWidget->geometry();
#ifdef Q_WS_MACX
QPoint point(newSize.left() + margin, newSize.bottom() - mMessageWindow->height() - margin);
mMessageWindow->move(mDocumentUI->thumbnailWidget->mapToGlobal(point));
#else
mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin);
#endif
mMessageWindow->showMessage(message, showSpinningWheel); mMessageWindow->showMessage(message, showSpinningWheel);
} }
} }

@ -71,7 +71,7 @@ class UBDocumentController : public UBDocumentContainer
void selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument = true); void selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument = true);
void show(); void show();
void hide(); void hide();
void showMessage(const QString& message, bool showSpinningWheel); void showMessage(const QString& message, bool showSpinningWheel = false);
void hideMessage(); void hideMessage();
void toggleDocumentToolsPalette(); void toggleDocumentToolsPalette();
void cut(); void cut();

@ -1,476 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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/>.
*/
#include "UBAbstractWidget.h"
#include <QtNetwork>
#include <QtXml>
#include "frameworks/UBFileSystemUtils.h"
#include "core/UBApplicationController.h"
#include "core/UBApplication.h"
#include "core/UBSettings.h"
#include "network/UBNetworkAccessManager.h"
#include "web/UBWebPage.h"
#include "web/UBWebKitUtils.h"
#include "web/UBWebController.h"
#include "core/memcheck.h"
QStringList UBAbstractWidget::sInlineJavaScripts;
bool UBAbstractWidget::sInlineJavaScriptLoaded = false;
UBAbstractWidget::UBAbstractWidget(const QUrl& pWidgetUrl, QWidget *parent)
: UBRoutedMouseEventWebView(parent)
, mWidgetUrl(pWidgetUrl)
, mIsResizable(false)
, mInitialLoadDone(false)
, mLoadIsErronous(false)
, mIsFreezable(true)
, mCanBeContent(0)
, mCanBeTool(0)
, mIsFrozen(false)
, mIsTakingSnapshot(false)
{
setAcceptDrops(true);
setPage(new UBWebPage(this));
QWebView::settings()->setAttribute(QWebSettings::JavaEnabled, true);
QWebView::settings()->setAttribute(QWebSettings::PluginsEnabled, true);
QWebView::settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true);
QWebView::settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
QWebView::settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
QWebView::settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true);
QWebView::settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true);
QWebView::page()->setNetworkAccessManager(UBNetworkAccessManager::defaultAccessManager());
setAutoFillBackground(false);
QPalette pagePalette = QWebView::page()->palette();
pagePalette.setBrush(QPalette::Base, QBrush(Qt::transparent));
pagePalette.setBrush(QPalette::Window, QBrush(Qt::transparent));
QWebView::page()->setPalette(pagePalette);
QPalette viewPalette = palette();
pagePalette.setBrush(QPalette::Base, QBrush(Qt::transparent));
viewPalette.setBrush(QPalette::Window, QBrush(Qt::transparent));
setPalette(viewPalette);
connect(QWebView::page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
connect(QWebView::page(), SIGNAL(geometryChangeRequested(const QRect&)), this, SIGNAL(geometryChangeRequested(const QRect&)));
connect(this, SIGNAL(loadFinished(bool)), this, SLOT(mainFrameLoadFinished (bool)));
setMouseTracking(true);
}
bool UBAbstractWidget::canBeContent()
{
// if we under MAC OS
#if defined(Q_OS_MAC)
return mCanBeContent & UBAbstractWidget::type_MAC;
#endif
// if we under UNIX OS
#if defined(Q_OS_UNIX)
return mCanBeContent & UBAbstractWidget::type_UNIX;
#endif
// if we under WINDOWS OS
#if defined(Q_OS_WIN)
return mCanBeContent & UBAbstractWidget::type_WIN;
#endif
}
bool UBAbstractWidget::canBeTool()
{
// if we under MAC OS
#if defined(Q_OS_MAC)
return mCanBeTool & UBAbstractWidget::type_MAC;
#endif
// if we under UNIX OS
#if defined(Q_OS_UNIX)
return mCanBeTool & UBAbstractWidget::type_UNIX;
#endif
// if we under WINDOWS OS
#if defined(Q_OS_WIN)
return mCanBeTool & UBAbstractWidget::type_WIN;
#endif
}
UBAbstractWidget::~UBAbstractWidget()
{
// NOOP
}
void UBAbstractWidget::loadMainHtml()
{
mInitialLoadDone = false;
QWebView::load(mMainHtmlUrl);
}
bool UBAbstractWidget::event(QEvent *event)
{
if (event->type() == QEvent::ContextMenu)
{
event->accept();
return true;
} else {
return QWebView::event(event);
}
}
void UBAbstractWidget::mainFrameLoadFinished (bool ok)
{
mInitialLoadDone = true;
mLoadIsErronous = !ok;
update();
}
bool UBAbstractWidget::hasEmbededObjects()
{
if (QWebView::page()->mainFrame())
{
QList<UBWebKitUtils::HtmlObject> htmlObjects = UBWebKitUtils::objectsInFrame(QWebView::page()->mainFrame());
return htmlObjects.length() > 0;
}
return false;
}
bool UBAbstractWidget::hasEmbededFlash()
{
if (hasEmbededObjects())
{
return QWebView::page()->mainFrame()->toHtml().contains("application/x-shockwave-flash");
}
else
{
return false;
}
}
void UBAbstractWidget::resize(qreal width, qreal height)
{
qreal w = qMax((qreal)mNominalSize.width(), width);
qreal h = qMax((qreal)mNominalSize.height(), height);
QWebView::page()->setViewportSize(QSize(w, h));
QWebView::setFixedSize(QSize(w, h));
}
QString UBAbstractWidget::iconFilePath(const QUrl& pUrl)
{
// TODO UB 4.x read config.xml widget.icon param first
QStringList files;
files << "icon.svg"; // W3C widget default 1
files << "icon.ico"; // W3C widget default 2
files << "icon.png"; // W3C widget default 3
files << "icon.gif"; // W3C widget default 4
files << "Icon.png"; // Apple widget default
QString file = UBFileSystemUtils::getFirstExistingFileFromList(pUrl.toLocalFile(), files);
// default
if (file.length() == 0)
{
file = QString(":/images/defaultWidgetIcon.png");
}
return file;
}
QString UBAbstractWidget::widgetName(const QUrl& widgetPath)
{
QString name;
QString version;
QFile w3CConfigFile(widgetPath.toLocalFile() + "/config.xml");
QFile appleConfigFile(widgetPath.toLocalFile() + "/Info.plist");
if (w3CConfigFile.exists() && w3CConfigFile.open(QFile::ReadOnly))
{
QDomDocument doc;
doc.setContent(w3CConfigFile.readAll());
QDomElement root = doc.firstChildElement("widget");
if (!root.isNull())
{
QDomElement nameElement = root.firstChildElement("name");
if (!nameElement.isNull())
name = nameElement.text();
version = root.attribute("version", "");
}
w3CConfigFile.close();
}
else if (appleConfigFile.exists() && appleConfigFile.open(QFile::ReadOnly))
{
QDomDocument doc;
doc.setContent(appleConfigFile.readAll());
QDomElement root = doc.firstChildElement("plist");
if (!root.isNull())
{
QDomElement dictElement = root.firstChildElement("dict");
if (!dictElement.isNull())
{
QDomNodeList childNodes = dictElement.childNodes();
// looking for something like
// ..
// <key>CFBundleDisplayName</key>
// <string>brain scans</string>
// ..
for(int i = 0; i < childNodes.count() - 1; i++)
{
if (childNodes.at(i).isElement())
{
QDomElement elKey = childNodes.at(i).toElement();
if (elKey.text() == "CFBundleDisplayName")
{
if (childNodes.at(i + 1).isElement())
{
QDomElement elValue = childNodes.at(i + 1).toElement();
name = elValue.text();
}
}
else if (elKey.text() == "CFBundleShortVersionString")
{
if (childNodes.at(i + 1).isElement())
{
QDomElement elValue = childNodes.at(i + 1).toElement();
version = elValue.text();
}
}
}
}
}
}
appleConfigFile.close();
}
QString result;
if (name.length() > 0)
{
result = name;
if (version.length() > 0)
{
result += " ";
result += version;
}
}
return result;
}
int UBAbstractWidget::widgetType(const QUrl& pUrl)
{
QString mime = UBFileSystemUtils::mimeTypeFromFileName(pUrl.toString());
if (mime == "application/vnd.apple-widget")
{
return UBWidgetType::Apple;
}
else if (mime == "application/widget")
{
return UBWidgetType::W3C;
}
else
{
return UBWidgetType::Other;
}
}
void UBAbstractWidget::mousePressEvent(QMouseEvent *event)
{
if(mIsFrozen)
{
event->accept();
return;
}
UBRoutedMouseEventWebView::mousePressEvent(event);
mMouseIsPressed = true;
}
void UBAbstractWidget::mouseMoveEvent(QMouseEvent *event)
{
if(mIsFrozen)
{
event->accept();
return;
}
// TODO UB 4.x fix web kit mouse move routing
if (mFirstReleaseAfterMove)
{
mFirstReleaseAfterMove = false;
}
else
{
UBRoutedMouseEventWebView::mouseMoveEvent(event);
}
}
void UBAbstractWidget::mouseReleaseEvent(QMouseEvent *event)
{
if(mIsFrozen)
{
event->accept();
return;
}
UBRoutedMouseEventWebView::mouseReleaseEvent(event);
mMouseIsPressed = false;
mFirstReleaseAfterMove = true;
}
QWebView * UBAbstractWidget::createWindow(QWebPage::WebWindowType type)
{
if (type == QWebPage::WebBrowserWindow)
{
UBApplication::applicationController->showInternet();
return UBApplication::webController->createNewTab();
}
else
{
return this;
}
}
void UBAbstractWidget::injectInlineJavaScript()
{
if (!sInlineJavaScriptLoaded)
{
sInlineJavaScripts = UBApplication::applicationController->widgetInlineJavaScripts();
sInlineJavaScriptLoaded = true;
}
foreach(QString script, sInlineJavaScripts)
{
QWebView::page()->mainFrame()->evaluateJavaScript(script);
}
}
void UBAbstractWidget::javaScriptWindowObjectCleared()
{
injectInlineJavaScript();
}
void UBAbstractWidget::paintEvent(QPaintEvent * event)
{
if (mIsFrozen)
{
QPainter p(this);
p.drawPixmap(0, 0, mSnapshot);
}
else
{
QWebView::paintEvent(event);
}
if (!mInitialLoadDone || mLoadIsErronous)
{
QPainter p(this);
QString message = tr("Loading ...");
// this is the right way of doing but we receive two callback and the one return always that the
// load as failed... to check
if (mInitialLoadDone && mLoadIsErronous)
message = tr("Cannot load content");
else
message = tr("Loading ...");
p.setFont(QFont("Arial", 12));
QFontMetrics fm = p.fontMetrics();
QRect txtBoundingRect = fm.boundingRect(message);
txtBoundingRect.moveCenter(rect().center());
txtBoundingRect.adjust(-10, -5, 10, 5);
p.setPen(Qt::NoPen);
p.setBrush(UBSettings::paletteColor);
p.drawRoundedRect(txtBoundingRect, 3, 3);
p.setPen(Qt::white);
p.drawText(rect(), Qt::AlignCenter, message);
}
}
void UBAbstractWidget::dropEvent(QDropEvent *event)
{
QWebView::dropEvent(event);
}
QPixmap UBAbstractWidget::takeSnapshot()
{
mIsTakingSnapshot = true;
QPixmap pix(size());
pix.fill(Qt::transparent);
render(&pix);
mIsTakingSnapshot = false;
return pix;
}
void UBAbstractWidget::setSnapshot(const QPixmap& pix)
{
mSnapshot = pix;
}
void UBAbstractWidget::freeze()
{
QPixmap pix = takeSnapshot();
mIsFrozen = true;
setSnapshot(pix);
update();
}
void UBAbstractWidget::unFreeze()
{
mIsFrozen = false;
update();
}

@ -1,155 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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 UBABSTRACTWIDGET_H_
#define UBABSTRACTWIDGET_H_
#include <QtGui>
#include <QtWebKit>
#include "web/UBRoutedMouseEventWebView.h"
struct UBWidgetType
{
enum Enum
{
W3C = 0, Apple, Other
};
};
class UBAbstractWidget : public UBRoutedMouseEventWebView
{
Q_OBJECT;
public:
UBAbstractWidget(const QUrl& pWidgetUrl, QWidget *parent = 0);
virtual ~UBAbstractWidget();
void loadMainHtml();
QUrl mainHtml()
{
return mMainHtmlUrl;
}
QUrl widgetUrl()
{
return mWidgetUrl;
}
QString mainHtmlFileName()
{
return mMainHtmlFileName;
}
bool hasEmbededObjects();
bool hasEmbededFlash();
void resize(qreal width, qreal height);
QSize nominalSize() const
{
return mNominalSize;
}
bool canBeContent();
bool canBeTool();
bool hasLoadedSuccessfully() const
{
return (mInitialLoadDone && !mLoadIsErronous);
}
bool freezable() { return mIsFreezable;}
bool resizable() { return mIsResizable;}
static QString iconFilePath(const QUrl& pUrl);
static QString widgetName(const QUrl& pUrl);
static int widgetType(const QUrl& pUrl);
bool isFrozen(){ return mIsFrozen;}
QPixmap snapshot(){return mSnapshot;}
void setSnapshot(const QPixmap& pix);
QPixmap takeSnapshot();
public slots:
void freeze();
void unFreeze();
signals:
void geometryChangeRequested(const QRect & geom);
protected:
bool mMouseIsPressed;
bool mFirstReleaseAfterMove;
virtual bool event(QEvent *e);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual QWebView * createWindow(QWebPage::WebWindowType type);
QUrl mMainHtmlUrl;
QString mMainHtmlFileName;
QUrl mWidgetUrl;
QSize mNominalSize;
bool mIsResizable;
bool mInitialLoadDone;
bool mLoadIsErronous;
bool mIsFreezable;
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);
virtual void dropEvent(QDropEvent *);
protected slots:
void mainFrameLoadFinished(bool ok);
private:
static QStringList sInlineJavaScripts;
static bool sInlineJavaScriptLoaded;
bool mIsFrozen;
QPixmap mSnapshot;
bool mIsTakingSnapshot;
private slots:
void javaScriptWindowObjectCleared();
};
#endif /* UBABSTRACTWIDGET_H_ */

@ -1,48 +0,0 @@
#include "UBAngleWidget.h"
#include <QPainter>
#include "core/memcheck.h"
UBAngleWidget::UBAngleWidget(QWidget *parent)
: QWidget(parent)
{
this->setFixedSize(45,30);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->setAttribute(Qt::WA_TranslucentBackground);
QImage mask_img(width(), height(), QImage::Format_Mono);
mask_img.fill(0xff);
QPainter mask_ptr(&mask_img);
mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
mask_ptr.drawRoundedRect(0,0,this->geometry().width() - 6,this->geometry().height() - 6,1,1);
bmpMask = QBitmap::fromImage(mask_img);
this->setMask(bmpMask);
}
UBAngleWidget::~UBAngleWidget()
{
}
void UBAngleWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
this->move(this->cursor().pos().x(), this->cursor().pos().y() - 30);
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
QBrush brush(Qt::white);
painter.setBrush(brush);
painter.drawRoundedRect(1,1,this->geometry().width() - 10,this->geometry().height() - 10,1,1);
painter.setPen(QColor(85,50,127));
painter.setFont(QFont("Arial", 10));
painter.drawText(1,1,this->geometry().width() - 10,this->geometry().height() - 10, Qt::AlignCenter, text);
}
void UBAngleWidget::setText(QString newText)
{
text = newText;
text.append(QChar(176));
}

@ -1,25 +0,0 @@
#ifndef UBANGLEWIDGET_H
#define UBANGLEWIDGET_H
#include <QWidget>
#include <QBitmap>
class UBAngleWidget : public QWidget
{
Q_OBJECT
public:
UBAngleWidget(QWidget *parent = 0);
~UBAngleWidget();
void setText(QString);
protected:
void paintEvent(QPaintEvent *event);
private:
QString text;
QBitmap bmpMask;
};
#endif // UBANGLEWIDGET_H

@ -1,77 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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/>.
*/
#include "UBAppleWidget.h"
#include <QtNetwork>
#include "web/UBWebKitUtils.h"
#include "network/UBNetworkAccessManager.h"
#include "core/memcheck.h"
UBAppleWidget::UBAppleWidget(const QUrl& pWidgetUrl, QWidget *parent)
: UBAbstractWidget(pWidgetUrl, parent)
{
QString path = pWidgetUrl.toLocalFile();
if (!path.endsWith(".wdgt") && !path.endsWith(".wdgt/"))
{
int lastSlashIndex = path.lastIndexOf("/");
if (lastSlashIndex > 0)
{
path = path.mid(0, lastSlashIndex + 1);
}
}
QFile plistFile(path + "/Info.plist");
plistFile.open(QFile::ReadOnly);
QByteArray plistBin = plistFile.readAll();
QString plist = QString::fromUtf8(plistBin);
int mainHtmlIndex = plist.indexOf("MainHTML");
int mainHtmlIndexStart = plist.indexOf("<string>", mainHtmlIndex);
int mainHtmlIndexEnd = plist.indexOf("</string>", mainHtmlIndexStart);
if (mainHtmlIndex > -1 && mainHtmlIndexStart > -1 && mainHtmlIndexEnd > -1)
{
mMainHtmlFileName = plist.mid(mainHtmlIndexStart + 8, mainHtmlIndexEnd - mainHtmlIndexStart - 8);
}
mMainHtmlUrl = pWidgetUrl;
mMainHtmlUrl.setPath(pWidgetUrl.path() + "/" + mMainHtmlFileName);
QWebView::load(mMainHtmlUrl);
QPixmap defaultPixmap(pWidgetUrl.toLocalFile() + "/Default.png");
setFixedSize(defaultPixmap.size());
mNominalSize = defaultPixmap.size();
}
UBAppleWidget::~UBAppleWidget()
{
// NOOP
}

@ -1,36 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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 UBAPPLEWIDGET_H_
#define UBAPPLEWIDGET_H_
#include <QtGui>
#include <QtWebKit>
#include "UBAbstractWidget.h"
class UBItem;
class UBAppleWidget : public UBAbstractWidget
{
Q_OBJECT;
public:
UBAppleWidget(const QUrl& pWidgetUrl, QWidget *parent = 0);
virtual ~UBAppleWidget();
};
#endif /* UBAPPLEWIDGET_H_ */

@ -21,6 +21,9 @@
#include "core/UBApplication.h" #include "core/UBApplication.h"
#include "core/UBSettings.h" #include "core/UBSettings.h"
#include "board/UBBoardController.h"
#include "board/UBBoardView.h"
#include "domain/UBGraphicsItemDelegate.h" #include "domain/UBGraphicsItemDelegate.h"
#include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsProxyWidget.h" #include "domain/UBGraphicsProxyWidget.h"
@ -90,14 +93,11 @@ UBGraphicsDelegateFrame::UBGraphicsDelegateFrame(UBGraphicsItemDelegate* pDelega
positionHandles(); positionHandles();
this->setAcceptHoverEvents(true); this->setAcceptHoverEvents(true);
angleWidget = new UBAngleWidget();
} }
UBGraphicsDelegateFrame::~UBGraphicsDelegateFrame() UBGraphicsDelegateFrame::~UBGraphicsDelegateFrame()
{ {
delete angleWidget;
// NOOP // NOOP
} }
@ -226,10 +226,46 @@ void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
mInitialTransform = buildTransform(); mInitialTransform = buildTransform();
mCurrentTool = toolFromPos(event->pos()); mCurrentTool = toolFromPos(event->pos());
setCursorFromAngle(QString(""));
event->accept(); event->accept();
} }
void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle)
{
if (mCurrentTool == Rotate)
{
QWidget *controlViewport = UBApplication::boardController->controlView()->viewport();
QSize cursorSize(45,30);
QImage mask_img(cursorSize, QImage::Format_Mono);
mask_img.fill(0xff);
QPainter mask_ptr(&mask_img);
mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
mask_ptr.drawRoundedRect(0,0, cursorSize.width()-1, cursorSize.height()-1, 6, 6);
QBitmap bmpMask = QBitmap::fromImage(mask_img);
QPixmap pixCursor(cursorSize);
pixCursor.fill(QColor(Qt::white));
QPainter painter(&pixCursor);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
painter.setBrush(QBrush(Qt::white));
painter.setPen(QPen(QColor(Qt::black)));
painter.drawRoundedRect(1,1,cursorSize.width()-2,cursorSize.height()-2,6,6);
painter.setFont(QFont("Arial", 10));
painter.drawText(1,1,cursorSize.width(),cursorSize.height(), Qt::AlignCenter, angle.append(QChar(176)));
painter.end();
pixCursor.setMask(bmpMask);
controlViewport->setCursor(pixCursor);
}
}
bool UBGraphicsDelegateFrame::canResizeBottomRight(qreal width, qreal height, qreal scaleFactor) bool UBGraphicsDelegateFrame::canResizeBottomRight(qreal width, qreal height, qreal scaleFactor)
{ {
bool res = false; bool res = false;
@ -427,12 +463,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
} }
} }
if (!angleWidget->isVisible()) setCursorFromAngle(QString::number((int)mAngle % 360));
angleWidget->show();
angleWidget->setText(QString::number((int)mAngle % 360));
angleWidget->update();
} }
else if (moving()) else if (moving())
{ {
@ -525,9 +556,6 @@ QTransform UBGraphicsDelegateFrame::buildTransform()
void UBGraphicsDelegateFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsDelegateFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (angleWidget->isVisible())
angleWidget->hide();
updateResizeCursors(); updateResizeCursors();
mDelegate->commitUndoStep(); mDelegate->commitUndoStep();

@ -18,7 +18,6 @@
#include <QtGui> #include <QtGui>
#include "core/UB.h" #include "core/UB.h"
#include "domain/UBAngleWidget.h"
class QGraphicsSceneMouseEvent; class QGraphicsSceneMouseEvent;
class UBGraphicsItemDelegate; class UBGraphicsItemDelegate;
@ -65,6 +64,7 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject
inline bool resizingTop () const { return mCurrentTool == ResizeTop; } inline bool resizingTop () const { return mCurrentTool == ResizeTop; }
inline bool rotating () const { return mCurrentTool == Rotate; } inline bool rotating () const { return mCurrentTool == Rotate; }
inline bool moving () const { return mCurrentTool == Move; } inline bool moving () const { return mCurrentTool == Move; }
void setCursorFromAngle(QString angle);
bool canResizeBottomRight(qreal width, qreal height, qreal scaleFactor); bool canResizeBottomRight(qreal width, qreal height, qreal scaleFactor);
QTransform buildTransform (); QTransform buildTransform ();
@ -120,8 +120,5 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject
bool mResizing; bool mResizing;
bool mMirroredXAtStart; bool mMirroredXAtStart;
bool mMirroredYAtStart; bool mMirroredYAtStart;
UBAngleWidget *angleWidget;
}; };
#endif /* UBGRAPHICSDELEGATEFRAME_H_ */ #endif /* UBGRAPHICSDELEGATEFRAME_H_ */

@ -37,7 +37,6 @@
#include "UBGraphicsWidgetItem.h" #include "UBGraphicsWidgetItem.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsMediaItem.h" #include "domain/UBGraphicsMediaItem.h"
#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsGroupContainerItem.h"
@ -107,12 +106,12 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec
, mFrame(0) , mFrame(0)
, mFrameWidth(UBSettings::settings()->objectFrameWidth) , mFrameWidth(UBSettings::settings()->objectFrameWidth)
, mAntiScaleRatio(1.0) , mAntiScaleRatio(1.0)
, mToolBarItem(NULL)
, mCanRotate(canRotate) , mCanRotate(canRotate)
, mCanDuplicate(true) , mCanDuplicate(true)
, mRespectRatio(respectRatio) , mRespectRatio(respectRatio)
, mMimeData(NULL) , mMimeData(NULL)
, mFlippable(false) , mFlippable(false)
, mToolBarItem(NULL)
, mToolBarUsed(useToolBar) , mToolBarUsed(useToolBar)
{ {
// NOOP // NOOP
@ -379,7 +378,14 @@ void UBGraphicsItemDelegate::setZOrderButtonsVisible(bool visible)
void UBGraphicsItemDelegate::remove(bool canUndo) void UBGraphicsItemDelegate::remove(bool canUndo)
{ {
// QGraphicsScene* scene = mDelegated->scene(); /*UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene());
if (scene && canUndo)
{
UBGraphicsItemUndoCommand *uc = new UBGraphicsItemUndoCommand(scene, mDelegated, 0);
UBApplication::undoStack->push(uc);
}
mDelegated->hide(); */
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene()); UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene());
if (scene) if (scene)
{ {
@ -387,11 +393,17 @@ void UBGraphicsItemDelegate::remove(bool canUndo)
scene->removeItem(button); scene->removeItem(button);
scene->removeItem(mFrame); scene->removeItem(mFrame);
/* this is performed because when removing delegated from scene while it contains flash content, segfault happens because of QGraphicsScene::removeItem() */
UBGraphicsWebView *mDelegated_casted = dynamic_cast<UBGraphicsWebView*>(mDelegated);
if (mDelegated_casted)
mDelegated_casted->setHtml(QString());
scene->removeItem(mDelegated); scene->removeItem(mDelegated);
if (canUndo) if (canUndo)
{ {
UBGraphicsItemUndoCommand *uc = new UBGraphicsItemUndoCommand((UBGraphicsScene*) scene, mDelegated, 0); UBGraphicsItemUndoCommand *uc = new UBGraphicsItemUndoCommand(scene, mDelegated, 0);
UBApplication::undoStack->push(uc); UBApplication::undoStack->push(uc);
} }
} }
@ -406,10 +418,6 @@ bool UBGraphicsItemDelegate::isLocked()
void UBGraphicsItemDelegate::duplicate() void UBGraphicsItemDelegate::duplicate()
{ {
// TODO UB 4.x .. rewrite .. .this is absurde ... we know what we are duplicating
UBApplication::boardController->copy();
UBApplication::boardController->paste();
UBApplication::boardController->duplicateItem(dynamic_cast<UBItem*>(delegated())); UBApplication::boardController->duplicateItem(dynamic_cast<UBItem*>(delegated()));
} }
@ -1075,11 +1083,11 @@ void MediaTimer::display(const QString &s)
void MediaTimer::setNumDigits(int numDigits) void MediaTimer::setNumDigits(int numDigits)
{ {
if (numDigits > 99) { if (numDigits > 99) {
qWarning("QLCDNumber::setNumDigits: (%s) Max 99 digits allowed"); qWarning("QLCDNumber::setNumDigits: Max 99 digits allowed");
numDigits = 99; numDigits = 99;
} }
if (numDigits < 0) { if (numDigits < 0) {
qWarning("QLCDNumber::setNumDigits: (%s) Min 0 digits allowed"); qWarning("QLCDNumber::setNumDigits: Min 0 digits allowed");
numDigits = 0; numDigits = 0;
} }
if (digitStr.isNull()) { // from constructor if (digitStr.isNull()) { // from constructor
@ -1181,8 +1189,6 @@ void DelegateMediaControl::positionHandles()
mLCDTimerArea.setHeight(parentItem()->boundingRect().height()); mLCDTimerArea.setHeight(parentItem()->boundingRect().height());
lcdTimer->setRect(mLCDTimerArea); lcdTimer->setRect(mLCDTimerArea);
lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0); lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0);
//lcdTimer->setRect(mLCDTimerArea);
//lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0);
mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()); mSeecArea.setWidth(rect().width()-mLCDTimerArea.width());
@ -1191,8 +1197,6 @@ void DelegateMediaControl::positionHandles()
setRect(selfRect); setRect(selfRect);
lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0); lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0);
//lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0);
} }
void DelegateMediaControl::update() void DelegateMediaControl::update()
@ -1200,7 +1204,6 @@ void DelegateMediaControl::update()
QTime t; QTime t;
t = t.addMSecs(mCurrentTimeInMs < 0 ? 0 : mCurrentTimeInMs); t = t.addMSecs(mCurrentTimeInMs < 0 ? 0 : mCurrentTimeInMs);
lcdTimer->display(t.toString("m:ss")); lcdTimer->display(t.toString("m:ss"));
//lcdTimer->display(t.toString("m:ss"));
QGraphicsRectItem::update(); QGraphicsRectItem::update();
} }
@ -1253,7 +1256,6 @@ void DelegateMediaControl::seekToMousePos(QPointF mousePos)
minX = frameWidth; minX = frameWidth;
length = mSeecArea.width() - lcdTimer->rect().width(); length = mSeecArea.width() - lcdTimer->rect().width();
length = mSeecArea.width() /*- lcdTimer->rect().width()*/;
qreal mouseX = mousePos.x(); qreal mouseX = mousePos.x();
if (mouseX >= (mSeecArea.width() - mSeecArea.height()/2)) if (mouseX >= (mSeecArea.width() - mSeecArea.height()/2))

@ -284,7 +284,7 @@ class UBGraphicsItemDelegate : public QObject
qreal mAntiScaleRatio; qreal mAntiScaleRatio;
QList<DelegateButton*> mButtons; QList<DelegateButton*> mButtons;
QList<DelegateButton*> mToolBarButtons;
UBGraphicsToolBarItem* mToolBarItem; UBGraphicsToolBarItem* mToolBarItem;
protected slots: protected slots:

@ -54,13 +54,13 @@ bool UBGraphicsMediaItem::sIsMutedByDefault = false;
UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent) UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent)
: UBGraphicsProxyWidget(parent) : UBGraphicsProxyWidget(parent)
, mVideoWidget(NULL)
, mAudioWidget(NULL)
, mMuted(sIsMutedByDefault) , mMuted(sIsMutedByDefault)
, mMutedByUserAction(sIsMutedByDefault) , mMutedByUserAction(sIsMutedByDefault)
, mMediaFileUrl(pMediaFileUrl) , mMediaFileUrl(pMediaFileUrl)
, mInitialPos(0)
, mVideoWidget(NULL)
, mAudioWidget(NULL)
, mLinkedImage(NULL) , mLinkedImage(NULL)
, mInitialPos(0)
{ {
update(); update();

@ -139,8 +139,6 @@ private:
QUrl mMediaFileUrl; QUrl mMediaFileUrl;
QString mMediaSource; QString mMediaSource;
qint64 mInitialPos;
mediaType mMediaType; mediaType mMediaType;
bool mShouldMove; bool mShouldMove;
@ -149,5 +147,7 @@ private:
bool haveLinkedImage; bool haveLinkedImage;
QGraphicsPixmapItem *mLinkedImage; QGraphicsPixmapItem *mLinkedImage;
qint64 mInitialPos;
}; };
#endif // UBGRAPHICSMEDIAITEM_H #endif // UBGRAPHICSMEDIAITEM_H

@ -94,7 +94,7 @@ void UBGraphicsMediaItemDelegate::buildButtons()
connect(mMuteButton, SIGNAL(clicked(bool)), delegated(), SLOT(toggleMute())); connect(mMuteButton, SIGNAL(clicked(bool)), delegated(), SLOT(toggleMute()));
connect(mMuteButton, SIGNAL(clicked(bool)), this, SLOT(toggleMute())); // for changing button image connect(mMuteButton, SIGNAL(clicked(bool)), this, SLOT(toggleMute())); // for changing button image
mButtons << mPlayPauseButton << mStopButton << mMuteButton; mToolBarButtons << mPlayPauseButton << mStopButton << mMuteButton;
mToolBarItem->setItemsOnToolBar(QList<QGraphicsItem*>() << mPlayPauseButton << mStopButton << mMediaControl << mMuteButton); mToolBarItem->setItemsOnToolBar(QList<QGraphicsItem*>() << mPlayPauseButton << mStopButton << mMediaControl << mMuteButton);
mToolBarItem->setVisibleOnBoard(true); mToolBarItem->setVisibleOnBoard(true);
@ -156,13 +156,10 @@ void UBGraphicsMediaItemDelegate::positionHandles()
int toolBarMinimumWidth = 0; int toolBarMinimumWidth = 0;
int mediaItemWidth = mToolBarItem->boundingRect().width(); int mediaItemWidth = mToolBarItem->boundingRect().width();
foreach (DelegateButton* button, mButtons) foreach (DelegateButton* button, mToolBarButtons)
{ {
if (button->getSection() == Qt::TitleBarArea) mediaItemWidth -= button->boundingRect().width() + mToolBarItem->getElementsPadding();
{ toolBarMinimumWidth += button->boundingRect().width() + mToolBarItem->getElementsPadding();
mediaItemWidth -= button->boundingRect().width() + mToolBarItem->getElementsPadding();
toolBarMinimumWidth += button->boundingRect().width() + mToolBarItem->getElementsPadding();
}
} }
toolBarMinimumWidth += mToolBarItem->boundingRect().height(); toolBarMinimumWidth += mToolBarItem->boundingRect().height();
@ -196,8 +193,6 @@ void UBGraphicsMediaItemDelegate::remove(bool canUndo)
QGraphicsScene* scene = mDelegated->scene(); QGraphicsScene* scene = mDelegated->scene();
scene->removeItem(mMediaControl);
UBGraphicsItemDelegate::remove(canUndo); UBGraphicsItemDelegate::remove(canUndo);
} }

@ -31,6 +31,7 @@
#include "gui/UBMagnifer.h" #include "gui/UBMagnifer.h"
#include "gui/UBMainWindow.h" #include "gui/UBMainWindow.h"
#include "gui/UBToolWidget.h"
#include "tools/UBGraphicsRuler.h" #include "tools/UBGraphicsRuler.h"
#include "tools/UBGraphicsProtractor.h" #include "tools/UBGraphicsProtractor.h"
@ -59,8 +60,6 @@
#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsGroupContainerItem.h"
#include "UBAppleWidget.h"
#include "UBW3CWidget.h"
#include "UBGraphicsStroke.h" #include "UBGraphicsStroke.h"
#include "core/memcheck.h" #include "core/memcheck.h"
@ -256,8 +255,8 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent)
, mDocument(parent) , mDocument(parent)
, mDarkBackground(false) , mDarkBackground(false)
, mCrossedBackground(false) , mCrossedBackground(false)
, mZoomFactor(1)
, mIsDesktopMode(false) , mIsDesktopMode(false)
, mZoomFactor(1)
, mIsModified(true) , mIsModified(true)
, mBackgroundObject(0) , mBackgroundObject(0)
, mPreviousWidth(0) , mPreviousWidth(0)
@ -1396,7 +1395,7 @@ UBGraphicsMediaItem* UBGraphicsScene::addAudio(const QUrl& pAudioFileUrl, bool s
UBGraphicsWidgetItem* UBGraphicsScene::addWidget(const QUrl& pWidgetUrl, const QPointF& pPos) UBGraphicsWidgetItem* UBGraphicsScene::addWidget(const QUrl& pWidgetUrl, const QPointF& pPos)
{ {
int widgetType = UBAbstractWidget::widgetType(pWidgetUrl); int widgetType = UBGraphicsWidgetItem::widgetType(pWidgetUrl);
if(widgetType == UBWidgetType::Apple) if(widgetType == UBWidgetType::Apple)
{ {
@ -1422,9 +1421,9 @@ UBGraphicsAppleWidgetItem* UBGraphicsScene::addAppleWidget(const QUrl& pWidgetUr
return appleWidget; return appleWidget;
} }
UBGraphicsW3CWidgetItem* UBGraphicsScene::addW3CWidget(const QUrl& pWidgetUrl, const QPointF& pPos, int widgetType) UBGraphicsW3CWidgetItem* UBGraphicsScene::addW3CWidget(const QUrl& pWidgetUrl, const QPointF& pPos)
{ {
UBGraphicsW3CWidgetItem *w3CWidget = new UBGraphicsW3CWidgetItem(pWidgetUrl, 0, widgetType); UBGraphicsW3CWidgetItem *w3CWidget = new UBGraphicsW3CWidgetItem(pWidgetUrl, 0);
addGraphicsWidget(w3CWidget, pPos); addGraphicsWidget(w3CWidget, pPos);
@ -1444,7 +1443,7 @@ void UBGraphicsScene::addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, co
graphicsWidget->setPos(QPointF(pPos.x() - graphicsWidget->boundingRect().width() / 2, graphicsWidget->setPos(QPointF(pPos.x() - graphicsWidget->boundingRect().width() / 2,
pPos.y() - graphicsWidget->boundingRect().height() / 2)); pPos.y() - graphicsWidget->boundingRect().height() / 2));
if (graphicsWidget->widgetWebView()->canBeContent()) if (graphicsWidget->canBeContent())
{ {
// graphicsWidget->widgetWebView()->loadMainHtml(); // graphicsWidget->widgetWebView()->loadMainHtml();
@ -1464,6 +1463,8 @@ void UBGraphicsScene::addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, co
UBApplication::boardController->controlView()->setFocus(); UBApplication::boardController->controlView()->setFocus();
} }
UBGraphicsW3CWidgetItem* UBGraphicsScene::addOEmbed(const QUrl& pContentUrl, const QPointF& pPos) UBGraphicsW3CWidgetItem* UBGraphicsScene::addOEmbed(const QUrl& pContentUrl, const QPointF& pPos)
{ {
QStringList widgetPaths = UBPersistenceManager::persistenceManager()->allWidgets(UBSettings::settings()->applicationApplicationsLibraryDirectory()); QStringList widgetPaths = UBPersistenceManager::persistenceManager()->allWidgets(UBSettings::settings()->applicationApplicationsLibraryDirectory());
@ -1978,7 +1979,16 @@ void UBGraphicsScene::addMagnifier(UBMagnifierParams params)
setModified(true); setModified(true);
} }
void UBGraphicsScene::moveMagnifier(QPoint newPos) void UBGraphicsScene::moveMagnifier()
{
if (magniferControlViewWidget)
{
QPoint magnifierPos = QPoint(magniferControlViewWidget->pos().x() + magniferControlViewWidget->size().width() / 2, magniferControlViewWidget->pos().y() + magniferControlViewWidget->size().height() / 2 );
moveMagnifier(magnifierPos, true);
}
}
void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab)
{ {
QWidget *cContainer = (QWidget*)(UBApplication::boardController->controlContainer()); QWidget *cContainer = (QWidget*)(UBApplication::boardController->controlContainer());
QGraphicsView *cView = (QGraphicsView*)UBApplication::boardController->controlView(); QGraphicsView *cView = (QGraphicsView*)UBApplication::boardController->controlView();
@ -1986,6 +1996,8 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos)
QPoint dvZeroPoint = dView->mapToGlobal(QPoint(0,0)); QPoint dvZeroPoint = dView->mapToGlobal(QPoint(0,0));
QRect qcr = cView->geometry();
QRect qdr = dView->geometry();
int cvW = cView->width(); int cvW = cView->width();
int dvW = dView->width(); int dvW = dView->width();
qreal wCoeff = (qreal)dvW / (qreal)cvW; qreal wCoeff = (qreal)dvW / (qreal)cvW;
@ -1998,8 +2010,8 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos)
QPoint cvPoint = cView->mapFromGlobal(globalPoint); QPoint cvPoint = cView->mapFromGlobal(globalPoint);
QPoint dvPoint( cvPoint.x() * wCoeff + dvZeroPoint.x(), cvPoint.y() * hCoeff + dvZeroPoint.y()); QPoint dvPoint( cvPoint.x() * wCoeff + dvZeroPoint.x(), cvPoint.y() * hCoeff + dvZeroPoint.y());
magniferControlViewWidget->grabNMove(globalPoint, globalPoint, false, false); magniferControlViewWidget->grabNMove(globalPoint, globalPoint, forceGrab, false);
magniferDisplayViewWidget->grabNMove(globalPoint, dvPoint, false, true); magniferDisplayViewWidget->grabNMove(globalPoint, dvPoint, forceGrab, true);
setModified(true); setModified(true);
} }

@ -35,12 +35,12 @@ class UBGraphicsAudioItem;
class UBGraphicsWidgetItem; class UBGraphicsWidgetItem;
class UBGraphicsW3CWidgetItem; class UBGraphicsW3CWidgetItem;
class UBGraphicsAppleWidgetItem; class UBGraphicsAppleWidgetItem;
class UBToolWidget;
class UBGraphicsPDFItem; class UBGraphicsPDFItem;
class UBGraphicsTextItem; class UBGraphicsTextItem;
class UBGraphicsRuler; class UBGraphicsRuler;
class UBGraphicsProtractor; class UBGraphicsProtractor;
class UBGraphicsCompass; class UBGraphicsCompass;
class UBAbstractWidget;
class UBDocumentProxy; class UBDocumentProxy;
class UBGraphicsCurtainItem; class UBGraphicsCurtainItem;
class UBGraphicsStroke; class UBGraphicsStroke;
@ -132,9 +132,11 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
UBGraphicsWidgetItem* addWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0)); UBGraphicsWidgetItem* addWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0));
UBGraphicsAppleWidgetItem* addAppleWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0)); UBGraphicsAppleWidgetItem* addAppleWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0));
UBGraphicsW3CWidgetItem* addW3CWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0),int widgetType = UBGraphicsItemType::W3CWidgetItemType); UBGraphicsW3CWidgetItem* addW3CWidget(const QUrl& pWidgetUrl, const QPointF& pPos = QPointF(0, 0));
void addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, const QPointF& pPos = QPointF(0, 0)); void addGraphicsWidget(UBGraphicsWidgetItem* graphicsWidget, const QPointF& pPos = QPointF(0, 0));
UBGraphicsMediaItem* addMedia(const QUrl& pMediaFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0)); UBGraphicsMediaItem* addMedia(const QUrl& pMediaFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0));
UBGraphicsMediaItem* addVideo(const QUrl& pVideoFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0)); UBGraphicsMediaItem* addVideo(const QUrl& pVideoFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0));
UBGraphicsMediaItem* addAudio(const QUrl& pAudioFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0)); UBGraphicsMediaItem* addAudio(const QUrl& pAudioFileUrl, bool shouldPlayAsap, const QPointF& pPos = QPointF(0, 0));
@ -324,7 +326,8 @@ public slots:
void selectionChangedProcessing(); void selectionChangedProcessing();
void updateGroupButtonState(); void updateGroupButtonState();
void moveMagnifier(QPoint newPos); void moveMagnifier();
void moveMagnifier(QPoint newPos, bool forceGrab = false);
void closeMagnifier(); void closeMagnifier();
void zoomInMagnifier(); void zoomInMagnifier();
void zoomOutMagnifier(); void zoomOutMagnifier();

@ -1,5 +1,7 @@
#include "UBGraphicsStrokesGroup.h" #include "UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsPolygonItem.h"
#include "core/memcheck.h" #include "core/memcheck.h"
UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsItemGroup(parent) UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsItemGroup(parent)
@ -63,6 +65,15 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const
{ {
UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup(); UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup();
QList<QGraphicsItem*> chl = childItems();
foreach(QGraphicsItem *child, chl)
{
UBGraphicsPolygonItem *polygon = dynamic_cast<UBGraphicsPolygonItem*>(child);
if (polygon)
copy->addToGroup(dynamic_cast<QGraphicsItem*>(polygon->deepCopy()));
}
copyItemParameters(copy); copyItemParameters(copy);
return copy; return copy;

@ -0,0 +1,160 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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/>.
*/
#include <QtGui>
#include <QtWebKit>
#include "UBGraphicsWebView.h"
#include "UBGraphicsScene.h"
#include "UBGraphicsItemDelegate.h"
#include "UBGraphicsDelegateFrame.h"
#include "core/memcheck.h"
UBGraphicsWebView::UBGraphicsWebView(QGraphicsItem* parent)
: QGraphicsWebView(parent)
{
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
mDelegate = new UBGraphicsItemDelegate(this, 0, true, false, false);
mDelegate->init();
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
QGraphicsWebView::setAcceptHoverEvents(true);
}
UBGraphicsWebView::~UBGraphicsWebView()
{
if (mDelegate)
delete mDelegate;
}
QVariant UBGraphicsWebView::itemChange(GraphicsItemChange change, const QVariant &value)
{
if ((change == QGraphicsItem::ItemSelectedHasChanged) && scene()) {
if (isSelected())
scene()->setActiveWindow(this);
else
if(scene()->activeWindow() == this)
scene()->setActiveWindow(0);
}
QVariant newValue = mDelegate->itemChange(change, value);
return QGraphicsWebView::itemChange(change, newValue);
}
void UBGraphicsWebView::setUuid(const QUuid &pUuid)
{
UBItem::setUuid(pUuid);
setData(UBGraphicsItemData::ItemUuid, QVariant(pUuid)); //store item uuid inside the QGraphicsItem to fast operations with Items on the scene
}
void UBGraphicsWebView::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (!mDelegate->mousePressEvent(event))
setSelected(true); /* forcing selection */
QGraphicsWebView::mousePressEvent(event);
}
void UBGraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if (!mDelegate->mouseMoveEvent(event))
QGraphicsWebView::mouseMoveEvent(event);
}
void UBGraphicsWebView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
mDelegate->mouseReleaseEvent(event);
QGraphicsWebView::mouseReleaseEvent(event);
}
void UBGraphicsWebView::wheelEvent(QGraphicsSceneWheelEvent *event)
{
if (mDelegate->weelEvent(event))
{
QGraphicsWebView::wheelEvent(event);
event->accept();
}
}
void UBGraphicsWebView::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
/* NOOP */
}
void UBGraphicsWebView::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
/* NOOP */
}
void UBGraphicsWebView::setDelegate(UBGraphicsItemDelegate* pDelegate)
{
if (mDelegate)
delete mDelegate;
mDelegate = pDelegate;
}
void UBGraphicsWebView::resize(qreal w, qreal h)
{
UBGraphicsWebView::resize(QSizeF(w, h));
}
void UBGraphicsWebView::resize(const QSizeF & pSize)
{
if (pSize != size()) {
QGraphicsWebView::setMaximumSize(pSize.width(), pSize.height());
QGraphicsWebView::resize(pSize.width(), pSize.height());
if (mDelegate)
mDelegate->positionHandles();
if (scene())
scene()->setModified(true);
}
}
QSizeF UBGraphicsWebView::size() const
{
return QGraphicsWebView::size();
}
UBGraphicsScene* UBGraphicsWebView::scene()
{
return static_cast<UBGraphicsScene*>(QGraphicsItem::scene());
}
void UBGraphicsWebView::remove()
{
if (mDelegate)
mDelegate->remove(true);
}
bool UBGraphicsWebView::event(QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride)
event->accept();
return QGraphicsWebView::event(event);
}

@ -0,0 +1,62 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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 UBGRAPHICSWEBVIEW_H_
#define UBGRAPHICSWEBVIEW_H_
#include <QtGui>
#include <QtWebKit>
#include "UBItem.h"
#include "UBResizableGraphicsItem.h"
class UBGraphicsItemDelegate;
class UBGraphicsWebView: public QGraphicsWebView, public UBItem, public UBResizableGraphicsItem, public UBGraphicsItem
{
public:
UBGraphicsWebView(QGraphicsItem* parent = 0);
virtual ~UBGraphicsWebView();
virtual void resize(qreal w, qreal h);
virtual void resize(const QSizeF & size);
virtual QSizeF size() const;
void setDelegate(UBGraphicsItemDelegate* pDelegate);
virtual UBGraphicsScene* scene();
virtual void remove();
virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;}
virtual void clearSource(){;}
virtual void setUuid(const QUuid &pUuid);
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
virtual bool event(QEvent *event);
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
};
#endif /* UBGRAPHICSWEBVIEW_H_ */

File diff suppressed because it is too large Load Diff

@ -17,100 +17,156 @@
#include <QtGui> #include <QtGui>
#include <QtWebKit> #include <QtWebKit>
#include <QDomElement>
#include "core/UB.h" #include "UBGraphicsWebView.h"
#include "UBGraphicsProxyWidget.h" #include "core/UB.h"
#include "UBW3CWidget.h"
#include "UBAppleWidget.h"
class UBWidgetUniboardAPI; class UBWidgetUniboardAPI;
class UBGraphicsScene; class UBGraphicsScene;
class UBAbstractWidget;
class UBW3CWidgetAPI; class UBW3CWidgetAPI;
class UBW3CWidgetWebStorageAPI; class UBW3CWidgetWebStorageAPI;
class UBGraphiscItem; class UBGraphiscItem;
class UBGraphiscItemDelegate; class UBGraphiscItemDelegate;
class UBGraphicsWidgetItem : public UBGraphicsProxyWidget struct UBWidgetType
{
enum Enum
{
W3C = 0, Apple, Other
};
};
class UBGraphicsWidgetItem : public UBGraphicsWebView
{ {
Q_OBJECT Q_OBJECT
public: public:
UBGraphicsWidgetItem(QGraphicsItem *parent = 0, int widgetType = 0); UBGraphicsWidgetItem(const QUrl &pWidgetUrl = QUrl(), QGraphicsItem *parent = 0);
~UBGraphicsWidgetItem(); ~UBGraphicsWidgetItem();
virtual UBGraphicsScene* scene();
UBAbstractWidget* widgetWebView();
virtual void initialize(); virtual void initialize();
virtual UBItem* deepCopy() const = 0; QUrl mainHtml();
void loadMainHtml();
QUrl widgetUrl();
QString mainHtmlFileName();
virtual void resize ( qreal w, qreal h ); bool hasEmbededObjects();
virtual void resize ( const QSizeF & size ); bool hasEmbededFlash();
bool canBeContent();
bool canBeTool();
void setPreference(const QString& key, QString value);
QString preference(const QString& key) const; QString preference(const QString& key) const;
void setPreference(const QString& key, QString value);
QMap<QString, QString> preferences() const; QMap<QString, QString> preferences() const;
void removePreference(const QString& key); void removePreference(const QString& key);
void removeAllPreferences(); void removeAllPreferences();
void setDatastoreEntry(const QString& key, QString value);
QString datastoreEntry(const QString& key) const; QString datastoreEntry(const QString& key) const;
void setDatastoreEntry(const QString& key, QString value);
QMap<QString, QString> datastoreEntries() const; QMap<QString, QString> datastoreEntries() const;
void removeDatastoreEntry(const QString& key); void removeDatastoreEntry(const QString& key);
void removeAllDatastoreEntries(); void removeAllDatastoreEntries();
virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate; }
virtual UBGraphicsItemDelegate* Delegate() const;
virtual void remove(); virtual void remove();
void removeScript(); void removeScript();
QString downloadUrl(const QString &fileUrl, const QString &extention);
QString downloadWeb(const QString &fileUrl);
void processDropEvent(QDropEvent *event); void processDropEvent(QDropEvent *event);
bool isDropableData(const QMimeData *data) const; bool isDropableData(const QMimeData *data) const;
virtual void setOwnFolder(const QUrl &newFolder) {ownFolder = newFolder;} virtual QUrl getOwnFolder() const;
virtual QUrl getOwnFolder() const {return ownFolder;} virtual void setOwnFolder(const QUrl &newFolder);
virtual void setSnapshotPath(const QUrl &newFilePath){SnapshotFile = newFilePath;} virtual void setSnapshotPath(const QUrl &newFilePath);
virtual QUrl getSnapshotPath(){return SnapshotFile;} virtual QUrl getSnapshotPath();
virtual void clearSource(); virtual void clearSource();
virtual void setUuid(const QUuid &pUuid); 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: 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 void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
virtual bool eventFilter(QObject *obj, QEvent *event); virtual bool eventFilter(QObject *obj, QEvent *event);
virtual void sendJSEnterEvent(); virtual void sendJSEnterEvent();
virtual void sendJSLeaveEvent(); virtual void sendJSLeaveEvent();
virtual void injectInlineJavaScript();
UBAbstractWidget* mWebKitWidget; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
QMap<QString, QString> mPreferences;
QMap<QString, QString> mDatastore;
protected slots: protected slots:
void geometryChangeRequested(const QRect& geom); void geometryChangeRequested(const QRect& geom);
virtual void javaScriptWindowObjectCleared(); virtual void javaScriptWindowObjectCleared();
void mainFrameLoadFinished(bool ok);
private slots:
void onLinkClicked(const QUrl& url);
private: private:
QPointF mLastMousePos; bool mIsFrozen;
bool mIsTakingSnapshot;
bool mShouldMoveWidget; bool mShouldMoveWidget;
UBWidgetUniboardAPI* mUniboardAPI; UBWidgetUniboardAPI* mUniboardAPI;
QPixmap mSnapshot;
QPointF mLastMousePos;
QUrl ownFolder; QUrl ownFolder;
QUrl SnapshotFile; QUrl SnapshotFile;
static bool sInlineJavaScriptLoaded;
static QStringList sInlineJavaScripts;
}; };
class UBGraphicsAppleWidgetItem : public UBGraphicsWidgetItem class UBGraphicsAppleWidgetItem : public UBGraphicsWidgetItem
@ -119,21 +175,17 @@ class UBGraphicsAppleWidgetItem : public UBGraphicsWidgetItem
public: public:
UBGraphicsAppleWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0); UBGraphicsAppleWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0);
UBGraphicsAppleWidgetItem(UBAppleWidget *appleWidget, QGraphicsItem *parent = 0);
~UBGraphicsAppleWidgetItem(); ~UBGraphicsAppleWidgetItem();
enum { Type = UBGraphicsItemType::AppleWidgetItemType };
virtual int type() const
{
return Type;
}
virtual UBItem* deepCopy() const;
virtual void copyItemParameters(UBItem *copy) const; virtual void copyItemParameters(UBItem *copy) const;
virtual int type() const;
virtual void setUuid(const QUuid &pUuid); virtual void setUuid(const QUuid &pUuid);
virtual UBItem* deepCopy() const;
enum
{
Type = UBGraphicsItemType::AppleWidgetItemType
};
}; };
@ -142,38 +194,76 @@ class UBGraphicsW3CWidgetItem : public UBGraphicsWidgetItem
Q_OBJECT Q_OBJECT
public: public:
UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0, int widgetType = UBGraphicsItemType::W3CWidgetItemType); class PreferenceValue
UBGraphicsW3CWidgetItem(UBW3CWidget *w3cWidget, QGraphicsItem *parent = 0, int widgetType = UBGraphicsItemType::W3CWidgetItemType); {
~UBGraphicsW3CWidgetItem(); public:
enum { Type = UBGraphicsItemType::W3CWidgetItemType }; PreferenceValue()
{
/* NOOP */
}
virtual int type() const
{
return Type;
}
virtual UBItem* deepCopy() const; PreferenceValue(const QString& pValue, bool pReadonly)
{
value = pValue;
readonly = pReadonly;
}
virtual void copyItemParameters(UBItem *copy) const; bool readonly;
QString value;
};
UBW3CWidget::Metadata metadatas() const; class Metadata
{
public:
QString id;
QString name;
QString description;
QString author;
QString authorEmail;
QString authorHref;
QString version;
};
enum
{
Type = UBGraphicsItemType::W3CWidgetItemType
};
UBW3CWidget* w3cWidget() const; UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent = 0);
~UBGraphicsW3CWidgetItem();
virtual void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget ); virtual int type() const;
virtual void setUuid(const QUuid &pUuid); 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;
private slots: 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(); virtual void javaScriptWindowObjectCleared();
private: private:
static void loadNPAPIWrappersTemplates();
static QString textForSubElementByLocale(QDomElement rootElement, QString subTagName, QLocale locale);
UBW3CWidget* mW3CWidget;
UBW3CWidgetAPI* mW3CWidgetAPI; UBW3CWidgetAPI* mW3CWidgetAPI;
QMap<QString, PreferenceValue> mPreferences;
static bool sTemplateLoaded;
static QString sNPAPIWrappperConfigTemplate;
static QMap<QString, QString> sNPAPIWrapperTemplates;
}; };
#endif // UBGRAPHICSWIDGETITEM_H #endif // UBGRAPHICSWIDGETITEM_H

@ -55,7 +55,7 @@ void UBGraphicsWidgetItemDelegate::updateMenuActionState()
UBGraphicsItemDelegate::updateMenuActionState(); UBGraphicsItemDelegate::updateMenuActionState();
if (freezeAction) if (freezeAction)
freezeAction->setChecked(delegated()->widgetWebView()->isFrozen()); freezeAction->setChecked(delegated()->isFrozen());
} }
void UBGraphicsWidgetItemDelegate::decorateMenu(QMenu* menu) void UBGraphicsWidgetItemDelegate::decorateMenu(QMenu* menu)
@ -71,7 +71,7 @@ void UBGraphicsWidgetItemDelegate::decorateMenu(QMenu* menu)
freezeAction->setCheckable(true); freezeAction->setCheckable(true);
if (delegated()->widgetWebView()->canBeTool()) if (delegated()->canBeTool())
{ {
setAsToolAction = mMenu->addAction(tr("Transform as Tool "), this, SLOT(pin())); setAsToolAction = mMenu->addAction(tr("Transform as Tool "), this, SLOT(pin()));
QIcon pinIcon; QIcon pinIcon;
@ -86,11 +86,11 @@ void UBGraphicsWidgetItemDelegate::freeze(bool frozen)
{ {
if(frozen) if(frozen)
{ {
delegated()->widgetWebView()->freeze(); delegated()->freeze();
} }
else else
{ {
delegated()->widgetWebView()->unFreeze(); delegated()->unFreeze();
} }
} }

@ -1,525 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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/>.
*/
#include "UBW3CWidget.h"
#include <QtNetwork>
#include <QtXml>
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBFileSystemUtils.h"
#include "core/UBApplication.h"
#include "core/UBSettings.h"
#include "api/UBWidgetUniboardAPI.h"
#include "board/UBBoardController.h"
#include "core/memcheck.h"
bool UBW3CWidget::sTemplateLoaded = false;
QMap<QString, QString> UBW3CWidget::sNPAPIWrapperTemplates;
QString UBW3CWidget::sNPAPIWrappperConfigTemplate;
UBW3CWidget::UBW3CWidget(const QUrl& pWidgetUrl, QWidget *parent)
: UBAbstractWidget(pWidgetUrl, parent)
{
QString path = pWidgetUrl.toLocalFile();
QDir potentialDir(path);
if (!path.endsWith(".wgt") && !path.endsWith(".wgt/") && !potentialDir.exists())
{
int lastSlashIndex = path.lastIndexOf("/");
if (lastSlashIndex > 0)
{
path = path.mid(0, lastSlashIndex + 1);
}
}
if(!path.endsWith("/"))
path += "/";
int width = 300;
int height = 150;
QFile configFile(path + "config.xml");
configFile.open(QFile::ReadOnly);
QDomDocument doc;
doc.setContent(configFile.readAll());
QDomNodeList widgetDomList = doc.elementsByTagName("widget");
if (widgetDomList.count() > 0)
{
QDomElement widgetElement = widgetDomList.item(0).toElement();
width = widgetElement.attribute("width", "300").toInt();
height = widgetElement.attribute("height", "150").toInt();
mMetadatas.id = widgetElement.attribute("id", "");
//some early widget (<= 4.3.4) where using identifier instead of id
if (mMetadatas.id.length() == 0)
mMetadatas.id = widgetElement.attribute("identifier", "");
mMetadatas.version = widgetElement.attribute("version", "");
// TODO UB 4.x map properly ub namespace
mIsResizable = widgetElement.attribute("ub:resizable", "false") == "true";
mIsFreezable = widgetElement.attribute("ub:freezable", "true") == "true";
QString roles = widgetElement.attribute("ub:roles", "content tool").trimmed().toLower();
//------------------------------//
if( roles == "" || roles.contains("tool") )
{
mCanBeTool = UBAbstractWidget::type_ALL;
}
if( roles.contains("twin") )
{
mCanBeTool |= UBAbstractWidget::type_WIN;
}
if( roles.contains("tmac") )
{
mCanBeTool |= UBAbstractWidget::type_MAC;
}
if( roles.contains("tunix") )
{
mCanBeTool |= UBAbstractWidget::type_UNIX;
}
//---------//
if( roles == "" || roles.contains("content") )
{
mCanBeContent = UBAbstractWidget::type_ALL;
}
if( roles.contains("cwin") )
{
mCanBeContent |= UBAbstractWidget::type_WIN;
}
if( roles.contains("cmac") )
{
mCanBeContent |= UBAbstractWidget::type_MAC;
}
if( roles.contains("cunix") )
{
mCanBeContent |= UBAbstractWidget::type_UNIX;
}
//------------------------------//
QDomNodeList contentDomList = widgetElement.elementsByTagName("content");
if (contentDomList.count() > 0)
{
QDomElement contentElement = contentDomList.item(0).toElement();
mMainHtmlFileName = contentElement.attribute("src", "");
}
mMetadatas.name = textForSubElementByLocale(widgetElement, "name", locale());
mMetadatas.description = textForSubElementByLocale(widgetElement, "description ", locale());
QDomNodeList authorDomList = widgetElement.elementsByTagName("author");
if (authorDomList.count() > 0)
{
QDomElement authorElement = authorDomList.item(0).toElement();
mMetadatas.author = authorElement.text();
mMetadatas.authorHref = authorElement.attribute("href", "");
mMetadatas.authorEmail = authorElement.attribute("email ", "");
}
QDomNodeList propertiesDomList = widgetElement.elementsByTagName("preference");
for (uint i = 0; i < propertiesDomList.length(); i++)
{
QDomElement preferenceElement = propertiesDomList.at(i).toElement();
QString prefName = preferenceElement.attribute("name", "");
if (prefName.length() > 0)
{
QString prefValue = preferenceElement.attribute("value", "");
bool readOnly = (preferenceElement.attribute("readonly", "false") == "true");
mPreferences.insert(prefName, PreferenceValue(prefValue, readOnly));
}
}
}
if (mMainHtmlFileName.length() == 0)
{
QFile defaultStartFile(path + "index.htm");
if (defaultStartFile.exists())
{
mMainHtmlFileName = "index.htm";
}
else
{
QFile secondDefaultStartFile(path + "index.html");
if (secondDefaultStartFile.exists())
{
mMainHtmlFileName = "index.html";
}
}
}
mMainHtmlUrl = pWidgetUrl;
mMainHtmlUrl.setPath(pWidgetUrl.path() + "/" + mMainHtmlFileName);
// is it a valid local file ?
QFile f(mMainHtmlUrl.toLocalFile());
if(!f.exists())
mMainHtmlUrl = QUrl(mMainHtmlFileName);
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);
}
UBW3CWidget::~UBW3CWidget()
{
// NOOP
}
void UBW3CWidget::javaScriptWindowObjectCleared()
{
UBWidgetUniboardAPI *uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene(), 0);
page()->mainFrame()->addToJavaScriptWindowObject("sankore", uniboardAPI);
}
bool UBW3CWidget::hasNPAPIWrapper(const QString& pMimeType)
{
loadNPAPIWrappersTemplates();
return sNPAPIWrapperTemplates.contains(pMimeType);
}
QString UBW3CWidget::createNPAPIWrapper(const QString& url,
const QString& pMimeType, const QSize& sizeHint, const QString& pName)
{
const QString userWidgetPath = UBSettings::settings()->userInteractiveDirectory() + "/" + tr("Web");
QDir userWidgetDir(userWidgetPath);
return createNPAPIWrapperInDir(url, userWidgetDir, pMimeType, sizeHint, pName);
}
QString UBW3CWidget::createNPAPIWrapperInDir(const QString& pUrl, const QDir& pDir,
const QString& pMimeType, const QSize& sizeHint,
const QString& pName)
{
QString url = pUrl;
url = UBFileSystemUtils::removeLocalFilePrefix(url);
QString name = pName;
QFileInfo fi(url);
if (name.length() == 0)
name = fi.baseName();
if (fi.exists()){
url = fi.fileName();
}
loadNPAPIWrappersTemplates();
QString htmlTemplate;
if (pMimeType.length() > 0 && sNPAPIWrapperTemplates.contains(pMimeType)){
htmlTemplate = sNPAPIWrapperTemplates.value(pMimeType);
}
else {
QString extension = UBFileSystemUtils::extension(url);
if (sNPAPIWrapperTemplates.contains(extension))
htmlTemplate = sNPAPIWrapperTemplates.value(extension);
}
if (htmlTemplate.length() > 0){
htmlTemplate = htmlTemplate.replace(QString("{in.url}"), url)
.replace(QString("{in.width}"), QString("%1").arg(sizeHint.width()))
.replace(QString("{in.height}"), QString("%1").arg(sizeHint.height()));
QString configTemplate = sNPAPIWrappperConfigTemplate
.replace(QString("{in.id}"), url)
.replace(QString("{in.width}"), QString("%1").arg(sizeHint.width()))
.replace(QString("{in.height}"), QString("%1").arg(sizeHint.height()))
.replace(QString("{in.name}"), name)
.replace(QString("{in.startFile}"), QString("index.htm"));
QString dirPath = pDir.path();
if (!pDir.exists())
pDir.mkpath(dirPath);
QString widgetLibraryPath = dirPath + "/" + name + ".wgt";
QDir widgetLibraryDir(widgetLibraryPath);
if (widgetLibraryDir.exists())
{
if (!UBFileSystemUtils::deleteDir(widgetLibraryDir.path()))
{
qWarning() << "Cannot delete old widget " << widgetLibraryDir.path();
}
}
widgetLibraryDir.mkpath(widgetLibraryPath);
if (fi.exists()){
QString target = widgetLibraryPath + "/" + fi.fileName();
QString source = pUrl;
source = UBFileSystemUtils::removeLocalFilePrefix(source);
QFile::copy(source, target);
}
QFile configFile(widgetLibraryPath + "/config.xml");
if (!configFile.open(QIODevice::WriteOnly))
{
qWarning() << "Cannot open file " << configFile.fileName();
return "";
}
QTextStream outConfig(&configFile);
outConfig.setCodec("UTF-8");
outConfig << configTemplate;
configFile.close();
QFile indexFile(widgetLibraryPath + "/index.htm");
if (!indexFile.open(QIODevice::WriteOnly))
{
qWarning() << "Cannot open file " << indexFile.fileName();
return "";
}
QTextStream outIndex(&indexFile);
outIndex.setCodec("UTF-8");
outIndex << htmlTemplate;
indexFile.close();
return widgetLibraryPath;
}
else
{
return "";
}
}
QString UBW3CWidget::createHtmlWrapperInDir(const QString& html, const QDir& pDir,
const QSize& sizeHint, const QString& pName)
{
QString widgetPath = pDir.path() + "/" + pName + ".wgt";
widgetPath = UBFileSystemUtils::nextAvailableFileName(widgetPath);
QDir widgetDir(widgetPath);
if (!widgetDir.exists())
{
widgetDir.mkpath(widgetDir.path());
}
QFile configFile(widgetPath + "/" + "config.xml");
if (configFile.exists())
{
configFile.remove(configFile.fileName());
}
if (!configFile.open(QIODevice::WriteOnly))
{
qWarning() << "Cannot open file " << configFile.fileName();
return "";
}
QTextStream outConfig(&configFile);
outConfig.setCodec("UTF-8");
outConfig << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
outConfig << "<widget xmlns=\"http://www.w3.org/ns/widgets\"" << endl;
outConfig << " xmlns:ub=\"http://uniboard.mnemis.com/widgets\"" << endl;
outConfig << " id=\"http://uniboard.mnemis.com/" << pName << "\"" <<endl;
outConfig << " version=\"1.0\"" << endl;
outConfig << " width=\"" << sizeHint.width() << "\"" << endl;
outConfig << " height=\"" << sizeHint.height() << "\"" << endl;
outConfig << " ub:resizable=\"true\">" << endl;
outConfig << " <name>" << pName << "</name>" << endl;
outConfig << " <content src=\"" << pName << ".html\"/>" << endl;
outConfig << "</widget>" << endl;
configFile.close();
const QString fullHtmlFileName = widgetPath + "/" + pName + ".html";
QFile widgetHtmlFile(fullHtmlFileName);
if (widgetHtmlFile.exists())
{
widgetHtmlFile.remove(widgetHtmlFile.fileName());
}
if (!widgetHtmlFile.open(QIODevice::WriteOnly))
{
qWarning() << "cannot open file " << widgetHtmlFile.fileName();
return "";
}
QTextStream outStartFile(&widgetHtmlFile);
outStartFile.setCodec("UTF-8");
outStartFile << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" << endl;
outStartFile << "<html>" << endl;
outStartFile << "<head>" << endl;
outStartFile << " <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" << endl;
outStartFile << "</head>" << endl;
outStartFile << " <body>" << endl;
outStartFile << html << endl;
outStartFile << " </body>" << endl;
outStartFile << "</html>" << endl;
widgetHtmlFile.close();
return widgetPath;
}
QString UBW3CWidget::freezedWidgetPage()
{
static QString defaultcontent;
if (defaultcontent.isNull()) {
QString freezedWidgetDefaultContentFilePath = freezedWidgetFilePath();
QFile wrapperFile(freezedWidgetDefaultContentFilePath);
if (!wrapperFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "can't open wrapper file " + freezedWidgetDefaultContentFilePath;
defaultcontent = "";
} else {
QByteArray arr = wrapperFile.readAll();
if (!arr.isEmpty()) {
defaultcontent = QString(arr);
} else {
qDebug() << "content of " + freezedWidgetDefaultContentFilePath + "is empty";
defaultcontent = "";
}
}
}
return defaultcontent;
}
QString UBW3CWidget::freezedWidgetFilePath()
{
return UBPlatformUtils::applicationResourcesDirectory() + "/etc/" + "freezedWidgetWrapper.html";
}
void UBW3CWidget::loadNPAPIWrappersTemplates()
{
if (!sTemplateLoaded)
{
sNPAPIWrapperTemplates.clear();
QString etcPath = UBPlatformUtils::applicationResourcesDirectory() + "/etc/";
QDir etcDir(etcPath);
foreach(QString fileName, etcDir.entryList())
{
if (fileName.startsWith("npapi-wrapper") && (fileName.endsWith(".htm") || fileName.endsWith(".html")))
{
QString htmlContent = UBFileSystemUtils::readTextFile(etcPath + fileName);
if (htmlContent.length() > 0)
{
QStringList tokens = fileName.split(".");
if (tokens.length() >= 4)
{
QString mime = tokens.at(tokens.length() - 4 );
mime += "/" + tokens.at(tokens.length() - 3);
QString fileExtension = tokens.at(tokens.length() - 2);
sNPAPIWrapperTemplates.insert(mime, htmlContent);
sNPAPIWrapperTemplates.insert(fileExtension, htmlContent);
}
}
}
}
sNPAPIWrappperConfigTemplate = UBFileSystemUtils::readTextFile(etcPath + "npapi-wrapper.config.xml");
sTemplateLoaded = true;
}
}
QString UBW3CWidget::textForSubElementByLocale(QDomElement rootElement, QString subTagName, QLocale locale)
{
QDomNodeList subList = rootElement.elementsByTagName(subTagName);
QString lang = locale.name();
if (lang.length() > 2)
lang[2] = QLatin1Char('-');
if (subList.count() > 1)
{
for(int i = 0; i < subList.count(); i++)
{
QDomNode node = subList.at(i);
QDomElement element = node.toElement();
QString configLang = element.attribute("xml:lang", "");
if(lang == configLang || (configLang.length() == 2 && configLang == lang.left(2)))
return element.text();
}
}
if (subList.count() >= 1)
{
QDomElement element = subList.item(0).toElement();
return element.text();
}
return "";
}

@ -1,126 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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 UBW3CWIDGET_H_
#define UBW3CWIDGET_H_
#include <QtGui>
#include <QtWebKit>
#include <QtXml>
/*
* wrapper for w3c widget 1.0 as define in http://www.w3.org/TR/widgets/
*/
#include "UBAbstractWidget.h"
class UBItem;
class UBW3CWidget : public UBAbstractWidget
{
Q_OBJECT;
public:
UBW3CWidget(const QUrl& pWidgetUrl, QWidget *parent = 0);
virtual ~UBW3CWidget();
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 QString freezedWidgetFilePath();
static bool hasNPAPIWrapper(const QString& pMimeType);
class PreferenceValue
{
public:
PreferenceValue()
{
// NOOP
}
PreferenceValue(const QString& pValue, bool pReadonly)
{
value = pValue;
readonly = pReadonly;
}
QString value;
bool readonly;
};
class Metadata
{
public:
QString id;
QString name;
QString description;
QString author;
QString authorEmail;
QString authorHref;
QString version;
};
QMap<QString, PreferenceValue> preferences()
{
return mPreferences;
}
Metadata metadatas() const
{
return mMetadatas;
}
private:
QMap<QString, PreferenceValue> mPreferences;
static bool sTemplateLoaded;
static QMap<QString, QString> sNPAPIWrapperTemplates;
static QString sNPAPIWrappperConfigTemplate;
static void loadNPAPIWrappersTemplates();
static QString textForSubElementByLocale(QDomElement rootElement, QString subTagName, QLocale locale);
// w3c metadata widget attributes
//
// http://www.w3.org/TR/widgets/#widget0
Metadata mMetadatas;
private slots:
void javaScriptWindowObjectCleared();
};
#endif /* UBW3CWIDGET_H_ */

@ -7,26 +7,23 @@ HEADERS += src/domain/UBGraphicsScene.h \
src/domain/UBDocumentUndoCommand.h \ src/domain/UBDocumentUndoCommand.h \
src/domain/UBPageSizeUndoCommand.h \ src/domain/UBPageSizeUndoCommand.h \
src/domain/UBGraphicsProxyWidget.h \ src/domain/UBGraphicsProxyWidget.h \
src/domain/UBGraphicsWebView.h \
src/domain/UBGraphicsSvgItem.h \ src/domain/UBGraphicsSvgItem.h \
src/domain/UBGraphicsPolygonItem.h \ src/domain/UBGraphicsPolygonItem.h \
src/domain/UBItem.h \ src/domain/UBItem.h \
src/domain/UBGraphicsWidgetItem.h \ src/domain/UBGraphicsWidgetItem.h \
src/domain/UBAppleWidget.h \
src/domain/UBGraphicsPDFItem.h \ src/domain/UBGraphicsPDFItem.h \
src/domain/UBGraphicsTextItem.h \ src/domain/UBGraphicsTextItem.h \
src/domain/UBAbstractWidget.h \
src/domain/UBW3CWidget.h \
src/domain/UBResizableGraphicsItem.h \ src/domain/UBResizableGraphicsItem.h \
src/domain/UBGraphicsStroke.h \ src/domain/UBGraphicsStroke.h \
src/domain/UBGraphicsMediaItem.h \ src/domain/UBGraphicsMediaItem.h \
src/domain/UBAbstractUndoCommand.h\ src/domain/UBAbstractUndoCommand.h\
src/domain/UBAngleWidget.h \ src/domain/UBGraphicsGroupContainerItem.h \
src/domain/UBGraphicsGroupContainerItem.h \ src/domain/UBGraphicsGroupContainerItemDelegate.h \
src/domain/UBGraphicsGroupContainerItemDelegate.h \ src/domain/UBGraphicsStrokesGroup.h
src/domain/UBGraphicsStrokesGroup.h
HEADERS += src/domain/UBGraphicsItemDelegate.h \ HEADERS += src/domain/UBGraphicsItemDelegate.h \
src/domain/UBGraphicsTextItemDelegate.h \ src/domain/UBGraphicsTextItemDelegate.h \
src/domain/UBGraphicsDelegateFrame.h \ src/domain/UBGraphicsDelegateFrame.h \
src/domain/UBGraphicsWidgetItemDelegate.h \ src/domain/UBGraphicsWidgetItemDelegate.h \
src/domain/UBGraphicsMediaItemDelegate.h src/domain/UBGraphicsMediaItemDelegate.h
@ -40,27 +37,24 @@ SOURCES += src/domain/UBGraphicsScene.cpp \
src/domain/UBDocumentUndoCommand.cpp \ src/domain/UBDocumentUndoCommand.cpp \
src/domain/UBPageSizeUndoCommand.cpp \ src/domain/UBPageSizeUndoCommand.cpp \
src/domain/UBGraphicsProxyWidget.cpp \ src/domain/UBGraphicsProxyWidget.cpp \
src/domain/UBGraphicsWebView.cpp \
src/domain/UBGraphicsSvgItem.cpp \ src/domain/UBGraphicsSvgItem.cpp \
src/domain/UBGraphicsPolygonItem.cpp \ src/domain/UBGraphicsPolygonItem.cpp \
src/domain/UBItem.cpp \ src/domain/UBItem.cpp \
src/domain/UBGraphicsVideoItem.cpp \ src/domain/UBGraphicsVideoItem.cpp \
src/domain/UBGraphicsWidgetItem.cpp \ src/domain/UBGraphicsWidgetItem.cpp \
src/domain/UBAppleWidget.cpp \
src/domain/UBGraphicsPDFItem.cpp \ src/domain/UBGraphicsPDFItem.cpp \
src/domain/UBGraphicsTextItem.cpp \ src/domain/UBGraphicsTextItem.cpp \
src/domain/UBAbstractWidget.cpp \
src/domain/UBW3CWidget.cpp \
src/domain/UBResizableGraphicsItem.cpp \ src/domain/UBResizableGraphicsItem.cpp \
src/domain/UBGraphicsStroke.cpp \ src/domain/UBGraphicsStroke.cpp \
src/domain/UBGraphicsMediaItem.cpp \ src/domain/UBGraphicsMediaItem.cpp \
src/domain/UBAbstractUndoCommand.cpp \ src/domain/UBAbstractUndoCommand.cpp \
src/domain/UBAngleWidget.cpp \ src/domain/ubgraphicsgroupcontaineritem.cpp \
src/domain/ubgraphicsgroupcontaineritem.cpp \ src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \
src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \ src/domain/UBGraphicsStrokesGroup.cpp
src/domain/UBGraphicsStrokesGroup.cpp
SOURCES += src/domain/UBGraphicsItemDelegate.cpp \ SOURCES += src/domain/UBGraphicsItemDelegate.cpp \
src/domain/UBGraphicsTextItemDelegate.cpp \ src/domain/UBGraphicsTextItemDelegate.cpp \
src/domain/UBGraphicsMediaItemDelegate.cpp \ src/domain/UBGraphicsMediaItemDelegate.cpp \
src/domain/UBGraphicsDelegateFrame.cpp \ src/domain/UBGraphicsDelegateFrame.cpp \
src/domain/UBGraphicsWidgetItemDelegate.cpp \ src/domain/UBGraphicsWidgetItemDelegate.cpp \

@ -32,7 +32,7 @@ UBCoreGraphicsScene::~UBCoreGraphicsScene()
//we must delete removed items that are no more in any scene //we must delete removed items that are no more in any scene
foreach (const QGraphicsItem* item, mItemsToDelete) foreach (const QGraphicsItem* item, mItemsToDelete)
{ {
if (item->scene()==NULL || item->scene() == this) if (item->scene() == NULL || item->scene() == this)
{ {
delete item; delete item;
} }
@ -61,6 +61,7 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete)
{ {
mItemsToDelete.remove(item); mItemsToDelete.remove(item);
delete item; delete item;
item = 0;
} }
} }
@ -84,6 +85,7 @@ bool UBCoreGraphicsScene::deleteItem(QGraphicsItem* item)
mItemsToDelete.remove(item); mItemsToDelete.remove(item);
delete item; delete item;
item = 0;
return true; return true;
} }
else else

@ -96,10 +96,6 @@ UBDockPalette::~UBDockPalette()
delete mpLayout; delete mpLayout;
mpLayout = NULL; mpLayout = NULL;
} }
if (NULL != mTabPalette) {
delete mTabPalette;
mTabPalette = NULL;
}
} }
/** /**
@ -533,6 +529,7 @@ void UBDockPalette::setVisible(bool visible)
bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode) bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode)
{ {
mLastOpenedTabForMode.insert(mCurrentMode, mpStackWidget->currentIndex());
mCurrentMode = mode; mCurrentMode = mode;
bool hasVisibleElements = false; bool hasVisibleElements = false;
//-------------------------------// //-------------------------------//
@ -556,7 +553,7 @@ bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode)
//-------------------------------// //-------------------------------//
if(mRegisteredWidgets.size() > 0) if(mRegisteredWidgets.size() > 0)
showTabWidget(0); showTabWidget(mLastOpenedTabForMode.value(mCurrentMode));
update(); update();

@ -176,6 +176,8 @@ protected:
QVector<UBDockPaletteWidget*> mRegisteredWidgets; QVector<UBDockPaletteWidget*> mRegisteredWidgets;
/** The current tab widget */ /** The current tab widget */
QString mCrntTabWidget; QString mCrntTabWidget;
/** Last opened tab index depending on mode */
QMap<eUBDockPaletteWidgetMode,int> mLastOpenedTabForMode;
private slots: private slots:
void onToolbarPosUpdated(); void onToolbarPosUpdated();

@ -18,11 +18,10 @@
#include "core/UBSettings.h" #include "core/UBSettings.h"
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "tools/UBToolsManager.h" #include "tools/UBToolsManager.h"
#include "domain/UBAbstractWidget.h"
#include "gui/UBMainWindow.h" #include "gui/UBMainWindow.h"
#include "core/memcheck.h" #include "core/memcheck.h"
@ -67,9 +66,9 @@ UBFavoriteToolPalette::UBFavoriteToolPalette(QWidget* parent)
foreach(QString widgetPath, appPathes) foreach(QString widgetPath, appPathes)
{ {
QAction *action = new QAction(UBAbstractWidget::widgetName(QUrl::fromLocalFile(widgetPath)), this); QAction *action = new QAction(UBGraphicsWidgetItem::widgetName(QUrl::fromLocalFile(widgetPath)), this);
action->setData(QUrl::fromLocalFile(widgetPath)); action->setData(QUrl::fromLocalFile(widgetPath));
action->setIcon(QIcon(UBAbstractWidget::iconFilePath(QUrl::fromLocalFile(widgetPath)))); action->setIcon(QIcon(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(widgetPath))));
connect(action, SIGNAL(triggered()), this, SLOT(addFavorite())); connect(action, SIGNAL(triggered()), this, SLOT(addFavorite()));
toolsActions << action; toolsActions << action;

@ -1,6 +1,5 @@
#include <QDomDocument> #include <QDomDocument>
#include "UBFeaturesWidget.h" #include "UBFeaturesWidget.h"
#include "domain/UBAbstractWidget.h"
#include "gui/UBThumbnailWidget.h" #include "gui/UBThumbnailWidget.h"
#include "frameworks/UBFileSystemUtils.h" #include "frameworks/UBFileSystemUtils.h"
#include "core/UBApplication.h" #include "core/UBApplication.h"

@ -243,6 +243,8 @@ void UBKeyboardPalette::adjustSizeAndPosition(bool pUp)
void UBKeyboardPalette::paintEvent( QPaintEvent* event) void UBKeyboardPalette::paintEvent( QPaintEvent* event)
{ {
checkLayout();
UBActionPalette::paintEvent(event); UBActionPalette::paintEvent(event);
QRect r = this->geometry(); QRect r = this->geometry();

@ -127,6 +127,7 @@ protected:
void init(); void init();
private: private:
QRect originalRect; QRect originalRect;
@ -134,6 +135,11 @@ private:
UBKeyButton** buttons; UBKeyButton** buttons;
UBKeyboardButton** ctrlButtons; UBKeyboardButton** ctrlButtons;
/*
For MacOS: synchronization with system locale.
*/
void checkLayout();
void createCtrlButtons(); void createCtrlButtons();
void setInput(const UBKeyboardLocale* locale); void setInput(const UBKeyboardLocale* locale);
@ -145,10 +151,6 @@ private:
void* storage; void* storage;
// Linux-related parameters // Linux-related parameters
int min_keycodes, max_keycodes, byte_per_code; int min_keycodes, max_keycodes, byte_per_code;
// Save locale before activation to restore it after (MAC)
QString activeLocale;
}; };
class UBKeyboardButton : public QWidget class UBKeyboardButton : public QWidget

@ -164,6 +164,9 @@ void UBKeyboardPalette::createCtrlButtons()
} }
void UBKeyboardPalette::checkLayout()
{}
void UBKeyboardPalette::onActivated(bool activated) void UBKeyboardPalette::onActivated(bool activated)
{ {
if (activated) if (activated)

@ -74,32 +74,35 @@ void SetMacLocaleByIdentifier(const QString& id)
} }
} }
void UBKeyboardPalette::onActivated(bool activated)
{
if (activated)
{
TISInputSourceRef selectedLocale = TISCopyCurrentKeyboardInputSource();
CFStringRef sr = (CFStringRef) TISGetInputSourceProperty(selectedLocale,
kTISPropertyInputSourceID);
if (sr!=NULL)
{
char tmp[1024];
CFStringGetCString(sr, tmp, 1024, 0);
activeLocale = tmp;
}
else
activeLocale = "";
void UBKeyboardPalette::checkLayout()
{
TISInputSourceRef selectedLocale = TISCopyCurrentKeyboardInputSource();
CFStringRef sr = (CFStringRef) TISGetInputSourceProperty(selectedLocale,
kTISPropertyInputSourceID);
if (sr!=NULL)
{
char clId[1024];
CFStringGetCString(sr, clId, 1024, 0);
for(int i=0; i<nLocalesCount;i++)
{
if (locales[i]->id == clId)
{
if (nCurrentLocale!=i)
{
setLocale(i);
}
break;
}
}
}
}
onLocaleChanged(locales[nCurrentLocale]); void UBKeyboardPalette::onActivated(bool)
} {
else
{
if (activeLocale != "")
SetMacLocaleByIdentifier(activeLocale);
}
} }
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale) void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale)

@ -64,9 +64,12 @@ void UBKeyboardPalette::createCtrlButtons()
ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
} }
void UBKeyboardPalette::checkLayout()
{}
void UBKeyboardPalette::onActivated(bool) void UBKeyboardPalette::onActivated(bool)
{ {}
}
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* ) void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* )
{} {}

@ -33,8 +33,8 @@ UBRubberBand::UBRubberBand(Shape s, QWidget * p)
: QRubberBand(s, p) : QRubberBand(s, p)
, mResizingMode(None) , mResizingMode(None)
, mMouseIsPressed(false) , mMouseIsPressed(false)
, mLastPressedPoint(QPoint())
, mResizingBorderHeight(20) , mResizingBorderHeight(20)
, mLastPressedPoint(QPoint())
{ {
customStyle = NULL; customStyle = NULL;

@ -22,6 +22,8 @@
#include <QUrl> #include <QUrl>
#include <QWebSettings> #include <QWebSettings>
#include <QApplication> #include <QApplication>
#include <QDomElement>
#include <QWebFrame>
#include "UBTeacherGuideWidgetsTools.h" #include "UBTeacherGuideWidgetsTools.h"
@ -30,7 +32,7 @@
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "domain/UBW3CWidget.h" #include "domain/UBGraphicsWidgetItem.h"
#include "globals/UBGlobals.h" #include "globals/UBGlobals.h"
@ -360,7 +362,7 @@ void UBTGMediaWidget::removeSource()
void UBTGMediaWidget::hideEvent(QHideEvent* event) void UBTGMediaWidget::hideEvent(QHideEvent* event)
{ {
if(mpWebView) if(mpWebView)
mpWebView->page()->mainFrame()->setContent(UBW3CWidget::freezedWidgetPage().toAscii()); mpWebView->page()->mainFrame()->setContent(UBGraphicsW3CWidgetItem::freezedWidgetPage().toAscii());
QWidget::hideEvent(event); QWidget::hideEvent(event);
} }
@ -421,7 +423,7 @@ void UBTGMediaWidget::createWorkWidget()
mMediaType = "w3c"; mMediaType = "w3c";
if(!(mIsPresentationMode || mIsInitializationMode)){ if(!(mIsPresentationMode || mIsInitializationMode)){
QDir baseW3CDirectory(UBPersistenceManager::persistenceManager()->teacherGuideAbsoluteObjectPath(proxyDocument)); QDir baseW3CDirectory(UBPersistenceManager::persistenceManager()->teacherGuideAbsoluteObjectPath(proxyDocument));
mMediaPath = UBW3CWidget::createNPAPIWrapperInDir(mMediaPath,baseW3CDirectory,mimeType,QSize(100,100),QUuid::createUuid()); mMediaPath = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(mMediaPath,baseW3CDirectory,mimeType,QSize(100,100),QUuid::createUuid());
} }
mpWebView = new UBDraggableWeb(mMediaPath); mpWebView = new UBDraggableWeb(mMediaPath);
mpWebView->setAcceptDrops(false); mpWebView->setAcceptDrops(false);

@ -14,242 +14,213 @@
*/ */
#include <QtGui> #include <QtGui>
#include "UBToolWidget.h" #include "UBToolWidget.h"
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBFileSystemUtils.h"
#include "core/UBApplication.h"
#include "core/UBSettings.h"
#include "domain/UBAbstractWidget.h"
#include "domain/UBAppleWidget.h"
#include "domain/UBW3CWidget.h"
#include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "api/UBWidgetUniboardAPI.h" #include "api/UBWidgetUniboardAPI.h"
#include "api/UBW3CWidgetAPI.h" #include "api/UBW3CWidgetAPI.h"
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "board/UBBoardView.h" #include "board/UBBoardView.h"
#include "core/UBApplication.h"
#include "core/UBSettings.h"
#include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBFileSystemUtils.h"
#include "core/memcheck.h" #include "core/memcheck.h"
QPixmap* UBToolWidget::sClosePixmap = 0; QPixmap* UBToolWidget::sClosePixmap = 0;
QPixmap* UBToolWidget::sUnpinPixmap = 0; QPixmap* UBToolWidget::sUnpinPixmap = 0;
UBToolWidget::UBToolWidget(const QUrl& pUrl, QWidget* pParent) UBToolWidget::UBToolWidget(const QUrl& pUrl, QGraphicsItem *pParent)
: QWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint) : QGraphicsWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)
, mToolWidget(0)
, mShouldMoveWidget(false) , mShouldMoveWidget(false)
, mContentMargin(0)
, mFrameWidth(0)
, mGraphicsWebView(0)
, mGraphicsWidgetItem(0)
{ {
int widgetType = UBAbstractWidget::widgetType(pUrl); int widgetType = UBGraphicsWidgetItem::widgetType(pUrl);
if (widgetType == UBWidgetType::Apple)
if(widgetType == UBWidgetType::Apple) mGraphicsWidgetItem = new UBGraphicsAppleWidgetItem(pUrl, this);
{ else if (widgetType == UBWidgetType::W3C)
mToolWidget = new UBAppleWidget(pUrl, this); mGraphicsWidgetItem = new UBGraphicsW3CWidgetItem(pUrl, this);
}
else if(widgetType == UBWidgetType::W3C)
{
mToolWidget = new UBW3CWidget(pUrl, this);
}
else else
{
qDebug() << "UBToolWidget::UBToolWidget: Unknown widget Type"; qDebug() << "UBToolWidget::UBToolWidget: Unknown widget Type";
return;
}
initialize(); initialize();
} }
UBToolWidget::UBToolWidget(UBGraphicsWidgetItem *pWidget, QGraphicsItem *pParent)
UBToolWidget::UBToolWidget(UBAbstractWidget* pWidget, QWidget* pParent) : QGraphicsWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)
: QWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)
, mToolWidget(pWidget)
, mShouldMoveWidget(false) , mShouldMoveWidget(false)
, mContentMargin(0)
, mFrameWidth(0)
, mGraphicsWebView(0)
, mGraphicsWidgetItem(pWidget)
{ {
mToolWidget->setParent(this);
mToolWidget->loadMainHtml();
initialize(); initialize();
javaScriptWindowObjectCleared(); javaScriptWindowObjectCleared();
} }
UBToolWidget::~UBToolWidget() UBToolWidget::~UBToolWidget()
{ {
// NOOP // NOOP
} }
void UBToolWidget::initialize() void UBToolWidget::initialize()
{ {
mToolWidget->setAcceptDrops(false); if (!sClosePixmap)
if(!sClosePixmap)
{
sClosePixmap = new QPixmap(":/images/close.svg"); sClosePixmap = new QPixmap(":/images/close.svg");
}
if(!sUnpinPixmap) if(!sUnpinPixmap)
{
sUnpinPixmap = new QPixmap(":/images/unpin.svg"); sUnpinPixmap = new QPixmap(":/images/unpin.svg");
}
mToolWidget->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
mToolWidget->setAttribute(Qt::WA_OpaquePaintEvent, false);
QPalette palette = mToolWidget->page()->palette(); QGraphicsLinearLayout *graphicsLayout = new QGraphicsLinearLayout(Qt::Vertical);
palette.setBrush(QPalette::Base, QBrush(Qt::transparent));
mToolWidget->page()->setPalette(palette);
connect(mToolWidget->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(javaScriptWindowObjectCleared()));
setLayout(new QVBoxLayout());
mFrameWidth = UBSettings::settings()->objectFrameWidth; mFrameWidth = UBSettings::settings()->objectFrameWidth;
mContentMargin = sClosePixmap->width() / 2 + mFrameWidth; mContentMargin = sClosePixmap->width() / 2 + mFrameWidth;
graphicsLayout->setContentsMargins(mContentMargin, mContentMargin, mContentMargin, mContentMargin);
setPreferredSize(mGraphicsWidgetItem->preferredWidth() + mContentMargin * 2, mGraphicsWidgetItem->preferredHeight() + mContentMargin * 2);
layout()->setContentsMargins(mContentMargin, mContentMargin, mContentMargin, mContentMargin); mGraphicsWebView = new QGraphicsWebView();
layout()->addWidget(mToolWidget); connect(mGraphicsWebView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
mGraphicsWebView->load(mGraphicsWidgetItem->mainHtml());
setFixedSize(mToolWidget->width() + mContentMargin * 2, mToolWidget->height() + mContentMargin * 2); graphicsLayout->addItem(mGraphicsWebView);
mToolWidget->installEventFilter(this); mGraphicsWebView->setAcceptDrops(false);
} mGraphicsWebView->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
mGraphicsWebView->setAttribute(Qt::WA_OpaquePaintEvent, false);
QPalette palette = mGraphicsWebView->page()->palette();
palette.setBrush(QPalette::Base, QBrush(Qt::transparent));
mGraphicsWebView->page()->setPalette(palette);
void UBToolWidget::javaScriptWindowObjectCleared() setLayout(graphicsLayout);
{
UBWidgetUniboardAPI* uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene());
mToolWidget->page()->mainFrame()->addToJavaScriptWindowObject("sankore", uniboardAPI);
UBW3CWidget* w3c = dynamic_cast<UBW3CWidget*>(mToolWidget); connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(javaScriptWindowObjectCleared()));
if (w3c)
{
UBW3CWidgetAPI* widgetAPI = new UBW3CWidgetAPI(w3c);
mToolWidget->page()->mainFrame()->addToJavaScriptWindowObject("widget", widgetAPI);
}
} }
bool UBToolWidget::event(QEvent *event)
void UBToolWidget::paintEvent(QPaintEvent *event)
{ {
QWidget::paintEvent(event); if (event->type() == QEvent::ShortcutOverride)
event->accept();
if (isActiveWindow()) return QGraphicsWidget::event(event);
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(127, 127, 127, 127));
painter.drawRoundedRect(QRectF(sClosePixmap->width() / 2
, sClosePixmap->height() / 2
, width() - sClosePixmap->width()
, mFrameWidth), mFrameWidth / 2, mFrameWidth / 2);
painter.drawPixmap(0, 0, *sClosePixmap);
if (mToolWidget->canBeContent())
painter.drawPixmap(mContentMargin, 0, *sUnpinPixmap);
}
} }
void UBToolWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
void UBToolWidget::mousePressEvent ( QMouseEvent * event )
{ {
QWidget::mousePressEvent(event); QGraphicsWidget::mousePressEvent(event);
// did webkit consume the mouse press ? /* did webkit consume the mouse press ? */
mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton); mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton);
mMousePressPos = event->pos(); mMousePressPos = event->pos();
event->accept(); event->accept();
update(); update();
} }
void UBToolWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void UBToolWidget::mouseMoveEvent ( QMouseEvent * event )
{ {
if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton)) if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton)) {
{ setPos(pos() - mMousePressPos + event->pos());
move(pos() - mMousePressPos + event->pos());
event->accept(); event->accept();
} }
QGraphicsWidget::mouseMoveEvent(event);
QWidget::mouseMoveEvent(event);
} }
void UBToolWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
void UBToolWidget::mouseReleaseEvent(QMouseEvent * event)
{ {
mShouldMoveWidget = false; mShouldMoveWidget = false;
if (event->pos().x() >= 0 && event->pos().x() < sClosePixmap->width() if (event->pos().x() >= 0 && event->pos().x() < sClosePixmap->width() && event->pos().y() >= 0 && event->pos().y() < sClosePixmap->height()) {
&& event->pos().y() >= 0 && event->pos().y() < sClosePixmap->height()) remove();
{
UBApplication::boardController->removeTool(this);
event->accept(); event->accept();
} }
else if (mToolWidget->canBeContent() && event->pos().x() >= mContentMargin && event->pos().x() < mContentMargin + sUnpinPixmap->width() else if (mGraphicsWidgetItem->canBeContent() && event->pos().x() >= mContentMargin && event->pos().x() < mContentMargin + sUnpinPixmap->width() && event->pos().y() >= 0 && event->pos().y() < sUnpinPixmap->height()) {
&& event->pos().y() >= 0 && event->pos().y() < sUnpinPixmap->height())
{
UBApplication::boardController->moveToolWidgetToScene(this); UBApplication::boardController->moveToolWidgetToScene(this);
event->accept(); event->accept();
} }
else else
QWidget::mouseReleaseEvent(event); // don't propgate to parent, the widget is deleted in UBApplication::boardController->removeTool QGraphicsWidget::mouseReleaseEvent(event); /* don't propgate to parent, the widget is deleted in UBApplication */
} }
void UBToolWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QGraphicsWidget::paint(painter, option, widget);
/* painting lightweight toolbar */
if (isActiveWindow()) {
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(Qt::NoPen);
painter->setBrush(QColor(127, 127, 127, 127));
painter->drawRoundedRect(QRectF(sClosePixmap->width() / 2, sClosePixmap->height() / 2, preferredWidth() - sClosePixmap->width(), mFrameWidth), mFrameWidth / 2, mFrameWidth / 2);
painter->drawPixmap(0, 0, *sClosePixmap);
if (mGraphicsWidgetItem->canBeContent())
painter->drawPixmap(mContentMargin, 0, *sUnpinPixmap);
}
}
bool UBToolWidget::eventFilter(QObject *obj, QEvent *event) void UBToolWidget::javaScriptWindowObjectCleared()
{ {
if (mShouldMoveWidget && obj == mToolWidget && event->type() == QEvent::MouseMove) UBWidgetUniboardAPI *uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene(), mGraphicsWidgetItem);
{
QMouseEvent *mouseMoveEvent = static_cast<QMouseEvent*>(event);
if (mouseMoveEvent->buttons() & Qt::LeftButton) mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", uniboardAPI);
{
move(pos() - mMousePressPos + mToolWidget->mapTo(this, mouseMoveEvent->pos()));
event->accept(); UBGraphicsW3CWidgetItem *graphicsW3cWidgetItem = dynamic_cast<UBGraphicsW3CWidgetItem*>(mGraphicsWidgetItem);
return true; if (graphicsW3cWidgetItem)
} {
UBW3CWidgetAPI* widgetAPI = new UBW3CWidgetAPI(graphicsW3cWidgetItem);
mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("widget", widgetAPI);
} }
}
// standard event processing UBGraphicsWidgetItem* UBToolWidget::graphicsWidgetItem() const
return QObject::eventFilter(obj, event); {
return mGraphicsWidgetItem;
} }
QPointF UBToolWidget::naturalCenter() const
{
if (mGraphicsWebView)
return mGraphicsWebView->geometry().center();
else
return QPointF(0, 0);
}
void UBToolWidget::centerOn(const QPoint& pos) void UBToolWidget::centerOn(const QPointF& pos)
{ {
QWidget::move(pos - QPoint(width() / 2, height() / 2)); QGraphicsWidget::setPos(pos - QPointF(preferredWidth() / 2, preferredHeight() / 2));
} }
void UBToolWidget::remove()
{
mGraphicsWebView->setHtml(QString());
scene()->removeItem(this);
}
QPoint UBToolWidget::naturalCenter() const UBGraphicsScene* UBToolWidget::scene()
{ {
if (mToolWidget) return qobject_cast<UBGraphicsScene*>(QGraphicsItem::scene());
return mToolWidget->geometry().center(); }
else
return QPoint(0, 0); QPointF UBToolWidget::pos() const
{
return QPointF(QGraphicsItem::pos().x() + mContentMargin * scale(), QGraphicsItem::pos().y() + mContentMargin * scale());
} }
void UBToolWidget::setPos(const QPointF &point)
{
UBToolWidget::setPos(point.x(), point.y());
}
void UBToolWidget::setPos(qreal x, qreal y)
{
QGraphicsItem::setPos(x - mContentMargin * scale(), y - mContentMargin * scale());
}
UBAbstractWidget* UBToolWidget::webWidget() const int UBToolWidget::type() const
{ {
return mToolWidget; return Type;
} }

@ -17,52 +17,60 @@
#define UBTOOLWIDGET_H_ #define UBTOOLWIDGET_H_
#include <QtGui> #include <QtGui>
#include <QtWebKit>
#include "core/UB.h"
class UBAbstractWidget;
class QWidget;
class UBGraphicsScene; class UBGraphicsScene;
class UBGraphicsWidgetItem;
class UBToolWidget : public QWidget class UBToolWidget : public QGraphicsWidget
{ {
Q_OBJECT; Q_OBJECT
public: public:
UBToolWidget(const QUrl& pUrl, QWidget* pParent = 0); UBToolWidget(const QUrl& pUrl, QGraphicsItem *pParent = 0);
UBToolWidget(UBAbstractWidget* pWidget, QWidget* pParent = 0); UBToolWidget(UBGraphicsWidgetItem* pGraphicsWidgetItem, QGraphicsItem *pParent = 0);
virtual ~UBToolWidget(); virtual ~UBToolWidget();
void centerOn(const QPoint& pos); UBGraphicsWidgetItem* graphicsWidgetItem() const;
QPointF naturalCenter() const;
QPoint naturalCenter() const; void centerOn(const QPointF& pos);
void remove();
UBAbstractWidget* webWidget() const; virtual UBGraphicsScene* scene();
virtual QPointF pos() const;
virtual void setPos(const QPointF &point);
virtual void setPos(qreal x, qreal y);
virtual int type() const;
enum
{
Type = UBGraphicsItemType::ToolWidgetItemType
};
protected: protected:
void initialize(); void initialize();
virtual void paintEvent(QPaintEvent *);
virtual void mousePressEvent ( QMouseEvent * event );
virtual void mouseMoveEvent ( QMouseEvent * event );
virtual void mouseReleaseEvent ( QMouseEvent * event );
virtual bool eventFilter(QObject *obj, QEvent *event); virtual bool event(QEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private slots: private slots:
void javaScriptWindowObjectCleared(); void javaScriptWindowObjectCleared();
protected: protected:
static QPixmap *sClosePixmap;
static QPixmap *sUnpinPixmap;
UBAbstractWidget *mToolWidget;
QPoint mMousePressPos;
bool mShouldMoveWidget; bool mShouldMoveWidget;
int mContentMargin; int mContentMargin;
int mFrameWidth; int mFrameWidth;
QGraphicsWebView *mGraphicsWebView;
UBGraphicsWidgetItem *mGraphicsWidgetItem;
QPointF mMousePressPos;
static QPixmap *sClosePixmap;
static QPixmap *sUnpinPixmap;
}; };
#endif /* UBTOOLWIDGET_H_ */ #endif /* UBTOOLWIDGET_H_ */

@ -139,7 +139,7 @@ QString UBAudioQueueRecorder::deviceUIDFromDeviceID(AudioDeviceID id)
{ {
char *cname = new char[1024]; char *cname = new char[1024];
bool result = CFStringGetCString (name, cname, 1024, kCFStringEncodingASCII); CFStringGetCString (name, cname, 1024, kCFStringEncodingASCII);
int length = CFStringGetLength (name); int length = CFStringGetLength (name);
uid = QString::fromAscii(cname, length); uid = QString::fromAscii(cname, length);

@ -151,7 +151,7 @@ bool UBQuickTimeFile::createCompressionSession()
} }
OSStatus err = noErr; OSStatus err = noErr;
ICMEncodedFrameOutputRecord encodedFrameOutputRecord = {0}; ICMEncodedFrameOutputRecord encodedFrameOutputRecord = {NULL, NULL, NULL};
ICMCompressionSessionOptionsRef sessionOptions = 0; ICMCompressionSessionOptionsRef sessionOptions = 0;
err = ICMCompressionSessionOptionsCreate(0, &sessionOptions); err = ICMCompressionSessionOptionsCreate(0, &sessionOptions);

@ -1,100 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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/>.
*/
#include "UBRoutedMouseEventWebView.h"
#include <QtCore>
#include <QtWebKit>
#include <QtGui>
#include "core/memcheck.h"
UBRoutedMouseEventWebView::UBRoutedMouseEventWebView(QWidget * parent)
: QWebView(parent)
{
QWebView::setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
}
UBRoutedMouseEventWebView::~UBRoutedMouseEventWebView()
{
// NOOP
}
void UBRoutedMouseEventWebView::mouseMoveEvent(QMouseEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
void UBRoutedMouseEventWebView::mousePressEvent(QMouseEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
void UBRoutedMouseEventWebView::mouseDoubleClickEvent(QMouseEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
void UBRoutedMouseEventWebView::mouseReleaseEvent(QMouseEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
void UBRoutedMouseEventWebView::contextMenuEvent(QContextMenuEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
void UBRoutedMouseEventWebView::wheelEvent(QWheelEvent* ev)
{
QWebPage* p = page();
if (p)
{
p->event(ev);
}
}
//void UBRoutedMouseEventWebView::dropEvent(QDropEvent *event)
//{
//// QWebView::dropEvent(event);
// event->accept();
//}

@ -1,45 +0,0 @@
/*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (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 UBROUTEDMOUSEEVENTWEBVIEW_H_
#define UBROUTEDMOUSEEVENTWEBVIEW_H_
#include <QtWebKit>
/*
* This class changes the routing of mouse events.
* Qt 4.5.2 does not report back the "accepted" flag set
* by WebKit, as we want to know if a mouse event has been
* consumed by webKit, we override them without keeping the
* accepted flag status
*/
class UBRoutedMouseEventWebView : public QWebView
{
public:
UBRoutedMouseEventWebView(QWidget * parent = 0 );
virtual ~UBRoutedMouseEventWebView();
protected:
virtual void mouseMoveEvent(QMouseEvent* ev);
virtual void mousePressEvent(QMouseEvent* ev);
virtual void mouseDoubleClickEvent(QMouseEvent* ev);
virtual void mouseReleaseEvent(QMouseEvent* ev);
virtual void contextMenuEvent(QContextMenuEvent* ev);
virtual void wheelEvent(QWheelEvent* ev);
// virtual void dropEvent(QDropEvent *);
};
#endif /* UBROUTEDMOUSEEVENTWEBVIEW_H_ */

@ -719,15 +719,16 @@ bool UBWebController::isEduMedia(const QUrl& pUrl)
void UBWebController::loadUrl(const QUrl& url) void UBWebController::loadUrl(const QUrl& url)
{ {
UBApplication::applicationController->showInternet();
if (UBSettings::settings()->webUseExternalBrowser->get().toBool()) if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
{ {
QDesktopServices::openUrl(url); QDesktopServices::openUrl(url);
} }
else else
{ {
UBApplication::applicationController->showInternet(); bool webBrowserAlreadyInstanciated = mStackedWidget->widget(WebBrowser) != NULL;
if (mCurrentWebBrowser && !(*mCurrentWebBrowser)) { if (!webBrowserAlreadyInstanciated) {
(*mCurrentWebBrowser)->loadUrl(url); (*mCurrentWebBrowser)->loadUrl(url);
} }
else { else {

@ -13,7 +13,6 @@ HEADERS += src/web/UBWebController.h \
src/web/UBWebKitUtils.h \ src/web/UBWebKitUtils.h \
src/web/UBWebPage.h \ src/web/UBWebPage.h \
src/web/UBWebPluginWidget.h \ src/web/UBWebPluginWidget.h \
src/web/UBRoutedMouseEventWebView.h \
src/web/UBOEmbedParser.h\ src/web/UBOEmbedParser.h\
src/web/browser/WBBrowserWindow.h \ src/web/browser/WBBrowserWindow.h \
src/web/browser/WBChaseWidget.h \ src/web/browser/WBChaseWidget.h \
@ -35,7 +34,6 @@ SOURCES += src/web/UBWebController.cpp \
src/web/UBWebKitUtils.cpp \ src/web/UBWebKitUtils.cpp \
src/web/UBWebPage.cpp \ src/web/UBWebPage.cpp \
src/web/UBWebPluginWidget.cpp \ src/web/UBWebPluginWidget.cpp \
src/web/UBRoutedMouseEventWebView.cpp \
src/web/UBOEmbedParser.cpp\ src/web/UBOEmbedParser.cpp\
src/web/browser/WBBrowserWindow.cpp \ src/web/browser/WBBrowserWindow.cpp \
src/web/browser/WBChaseWidget.cpp \ src/web/browser/WBChaseWidget.cpp \

Loading…
Cancel
Save