From 687b65658c592b9ddf5b883de627999dda0d19e5 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Mon, 3 Sep 2012 17:01:27 +0300 Subject: [PATCH 01/10] Sankore-861 Only standard created annotations change their color --- src/board/UBBoardController.cpp | 15 +++++++++ src/domain/UBGraphicsStrokesGroup.cpp | 48 +++++++++++++++++++++++++++ src/domain/UBGraphicsStrokesGroup.h | 8 +++++ 3 files changed, 71 insertions(+) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index bcfc1ddd..7a14e8d4 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1543,6 +1543,21 @@ void UBBoardController::changeBackground(bool isDark, bool isCrossed) mActiveScene->setBackground(isDark, isCrossed); + foreach (QGraphicsItem *item, mActiveScene->items()) { + if (item->type() == UBGraphicsStrokesGroup::Type) { + UBGraphicsStrokesGroup *curGroup = static_cast(item); + QColor compareColor = curGroup->color(currentIsDark ? UBGraphicsStrokesGroup::colorOnDarkBackground + : UBGraphicsStrokesGroup::colorOnLightBackground); + + if (curGroup->color() == compareColor) { + QColor newColor = curGroup->color(!currentIsDark ? UBGraphicsStrokesGroup::colorOnDarkBackground + : UBGraphicsStrokesGroup::colorOnLightBackground); + curGroup->setColor(newColor); + } + + } + } + updateBackgroundState(); emit backgroundChanged(); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index a5320924..6da869a1 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -32,6 +32,54 @@ void UBGraphicsStrokesGroup::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 UBGraphicsStrokesGroup::setColor(const QColor &color, colorType pColorType) +{ + //TODO Implement common mechanism of managing groups, drop UBGraphicsStroke if it's obsolete + //Using casting for the moment + foreach (QGraphicsItem *item, childItems()) { + if (item->type() == UBGraphicsPolygonItem::Type) { + UBGraphicsPolygonItem *curPolygon = static_cast(item); + + switch (pColorType) { + case currentColor : + curPolygon->setColor(color); + break; + case colorOnLightBackground : + curPolygon->setColorOnLightBackground(color); + break; + case colorOnDarkBackground : + curPolygon->setColorOnDarkBackground(color); + break; + } + } + } +} + +QColor UBGraphicsStrokesGroup::color(colorType pColorType) const +{ + QColor result; + + foreach (QGraphicsItem *item, childItems()) { + if (item->type() == UBGraphicsPolygonItem::Type) { + UBGraphicsPolygonItem *curPolygon = static_cast(item); + + switch (pColorType) { + case currentColor : + result = curPolygon->color(); + break; + case colorOnLightBackground : + result = curPolygon->colorOnLightBackground(); + break; + case colorOnDarkBackground : + result = curPolygon->colorOnDarkBackground(); + break; + } + + } + } + + return result; +} void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event) { diff --git a/src/domain/UBGraphicsStrokesGroup.h b/src/domain/UBGraphicsStrokesGroup.h index b2310773..2c286d11 100644 --- a/src/domain/UBGraphicsStrokesGroup.h +++ b/src/domain/UBGraphicsStrokesGroup.h @@ -11,6 +11,12 @@ class UBGraphicsStrokesGroup : public QObject, public QGraphicsItemGroup, public { Q_OBJECT public: + enum colorType { + currentColor = 0 + , colorOnLightBackground + , colorOnDarkBackground + }; + UBGraphicsStrokesGroup(QGraphicsItem* parent = 0); ~UBGraphicsStrokesGroup(); virtual UBItem* deepCopy() const; @@ -23,6 +29,8 @@ public: return Type; } virtual void setUuid(const QUuid &pUuid); + void setColor(const QColor &color, colorType pColorType = currentColor); + QColor color(colorType pColorType = currentColor) const; protected: From 678633094d33a5fa15f6f77578447c3d91fe66f6 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Mon, 3 Sep 2012 19:48:05 +0300 Subject: [PATCH 02/10] Sankore-861 using recolorAllItemsFunction --- src/board/UBBoardController.cpp | 16 ---------------- src/domain/UBGraphicsScene.cpp | 29 +++++++++++------------------ 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 7a14e8d4..c0be0da8 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1543,28 +1543,12 @@ void UBBoardController::changeBackground(bool isDark, bool isCrossed) mActiveScene->setBackground(isDark, isCrossed); - foreach (QGraphicsItem *item, mActiveScene->items()) { - if (item->type() == UBGraphicsStrokesGroup::Type) { - UBGraphicsStrokesGroup *curGroup = static_cast(item); - QColor compareColor = curGroup->color(currentIsDark ? UBGraphicsStrokesGroup::colorOnDarkBackground - : UBGraphicsStrokesGroup::colorOnLightBackground); - - if (curGroup->color() == compareColor) { - QColor newColor = curGroup->color(!currentIsDark ? UBGraphicsStrokesGroup::colorOnDarkBackground - : UBGraphicsStrokesGroup::colorOnLightBackground); - curGroup->setColor(newColor); - } - - } - } - updateBackgroundState(); emit backgroundChanged(); } } - void UBBoardController::boardViewResized(QResizeEvent* event) { Q_UNUSED(event); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index b4cbfc4e..9a89e96b 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -891,25 +891,18 @@ void UBGraphicsScene::recolorAllItems() view->setViewportUpdateMode(QGraphicsView::NoViewportUpdate); } - for(int i = 0; i < mFastAccessItems.size(); i++) - { - UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast (mFastAccessItems.at(i)); - - if (polygonItem) - { - QColor color; - - if (mDarkBackground) - { - color = polygonItem->colorOnDarkBackground(); - } - else - { - color = polygonItem->colorOnLightBackground(); + bool currentIslight = isLightBackground(); + foreach (QGraphicsItem *item, items()) { + if (item->type() == UBGraphicsStrokesGroup::Type) { + UBGraphicsStrokesGroup *curGroup = static_cast(item); + QColor compareColor = curGroup->color(currentIslight ? UBGraphicsStrokesGroup::colorOnDarkBackground + : UBGraphicsStrokesGroup::colorOnLightBackground); + + if (curGroup->color() == compareColor) { + QColor newColor = curGroup->color(!currentIslight ? UBGraphicsStrokesGroup::colorOnDarkBackground + : UBGraphicsStrokesGroup::colorOnLightBackground); + curGroup->setColor(newColor); } - - polygonItem->setColor(color); - continue; } } From 4ec54ee3a86ceefcdec2b87b8c4a6d212cea76fe Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Mon, 3 Sep 2012 20:31:51 +0300 Subject: [PATCH 03/10] Delete group after deletion of last member --- src/domain/UBGraphicsScene.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 018d463c..0f3ecc17 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1600,6 +1600,8 @@ void UBGraphicsScene::addItems(const QSet& items) void UBGraphicsScene::removeItem(QGraphicsItem* item) { + UBGraphicsGroupContainerItem* group = qgraphicsitem_cast(item->parentItem()); + item->setSelected(false); UBCoreGraphicsScene::removeItem(item); UBApplication::boardController->freezeW3CWidget(item, true); @@ -1608,6 +1610,15 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) --mItemCount; mFastAccessItems.removeAll(item); + + if (group) + { + if (group->childItems().empty()) + { + group->Delegate()->remove(); + UBCoreGraphicsScene::removeItemFromDeletion(group); + } + } } void UBGraphicsScene::removeItems(const QSet& items) From e232bbc9009e107796114da3aabd2d3ef0ae1e7e Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Mon, 3 Sep 2012 21:49:05 +0300 Subject: [PATCH 04/10] Some changes crash related --- src/domain/UBGraphicsScene.cpp | 29 +++++++++++++++++--------- src/frameworks/UBCoreGraphicsScene.cpp | 1 + 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 0f3ecc17..d5eb8d36 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1099,6 +1099,11 @@ void UBGraphicsScene::clearItemsAndAnnotations() setDocumentUpdated(); } +bool isService(QGraphicsItem *item) { + return (item->type() == UBGraphicsDelegateFrame::Type) + || (item->parentItem() && item->parentItem()->Type == UBGraphicsDelegateFrame::Type); +} + void UBGraphicsScene::clearItems() { deselectAllItems(); @@ -1113,9 +1118,13 @@ void UBGraphicsScene::clearItems() bool isPolygon = qgraphicsitem_cast(item) != NULL; bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; - if(!isGroup && !isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) - { + bool inGroup = (item->parentItem() + && (item->parentItem()->type() == UBGraphicsGroupContainerItem::Type)); + + if(!isGroup && !isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) { removeItem(item); + } + if (!inGroup || !isService(item)) { removedItems << item; } } @@ -1611,14 +1620,14 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) mFastAccessItems.removeAll(item); - if (group) - { - if (group->childItems().empty()) - { - group->Delegate()->remove(); - UBCoreGraphicsScene::removeItemFromDeletion(group); - } - } +// if (group) +// { +// if (group->childItems().empty()) +// { +// group->Delegate()->remove(); +// UBCoreGraphicsScene::removeItemFromDeletion(group); +// } +// } } void UBGraphicsScene::removeItems(const QSet& items) diff --git a/src/frameworks/UBCoreGraphicsScene.cpp b/src/frameworks/UBCoreGraphicsScene.cpp index b39eef0d..28dd6a9f 100644 --- a/src/frameworks/UBCoreGraphicsScene.cpp +++ b/src/frameworks/UBCoreGraphicsScene.cpp @@ -73,6 +73,7 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete) QGraphicsScene::removeItem(item); if (forceDelete) { + qDebug() << "force delete is " << forceDelete; deleteItem(item); } setModified(true); From a3be61c15b7886a4d434e6715dc58c158c976742 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 4 Sep 2012 13:00:35 +0300 Subject: [PATCH 05/10] Keyboard under MAX 10.7 --- src/gui/UBKeyboardPalette.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/UBKeyboardPalette.cpp b/src/gui/UBKeyboardPalette.cpp index 3f1fe242..2a496526 100644 --- a/src/gui/UBKeyboardPalette.cpp +++ b/src/gui/UBKeyboardPalette.cpp @@ -60,7 +60,10 @@ UBKeyboardPalette::UBKeyboardPalette(QWidget *parent) createCtrlButtons(); nCurrentLocale = UBSettings::settings()->KeyboardLocale->get().toInt(); - setInput(locales[nCurrentLocale]); + if (nCurrentLocale < 0 || nCurrentLocale >= nLocalesCount) + nCurrentLocale = 0; + if (locales!=NULL) + setInput(locales[nCurrentLocale]); setContentsMargins( 22, 22, 22, 22 ); From eb53715d6c51cb646d8ddce5f3e11327b135d27a Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Tue, 4 Sep 2012 15:28:41 +0300 Subject: [PATCH 06/10] Eraising elements --- src/api/UBWidgetUniboardAPI.cpp | 2 +- src/board/UBBoardController.cpp | 8 +- src/desktop/UBDesktopAnnotationController.cpp | 2 +- src/domain/UBGraphicsGroupContainerItem.cpp | 5 +- src/domain/UBGraphicsItemDelegate.cpp | 19 ++- src/domain/UBGraphicsItemDelegate.h | 1 + src/domain/UBGraphicsScene.cpp | 152 ++++++------------ src/domain/UBGraphicsScene.h | 12 +- src/domain/UBGraphicsTextItemDelegate.cpp | 9 +- src/domain/UBGraphicsTextItemDelegate.h | 1 + src/domain/UBItem.cpp | 43 +++++ src/domain/UBItem.h | 1 + 12 files changed, 136 insertions(+), 119 deletions(-) diff --git a/src/api/UBWidgetUniboardAPI.cpp b/src/api/UBWidgetUniboardAPI.cpp index 0e2a54f1..b86e7aa1 100644 --- a/src/api/UBWidgetUniboardAPI.cpp +++ b/src/api/UBWidgetUniboardAPI.cpp @@ -250,7 +250,7 @@ void UBWidgetUniboardAPI::eraseLineTo(const qreal x, const qreal y, const qreal void UBWidgetUniboardAPI::clear() { if (mScene) - mScene->clearItemsAndAnnotations(); + mScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations); } diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index a9600ab6..ea627e3f 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -683,7 +683,7 @@ void UBBoardController::clearScene() if (mActiveScene) { freezeW3CWidgets(true); - mActiveScene->clearItemsAndAnnotations(); + mActiveScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations); updateActionStates(); } } @@ -694,7 +694,7 @@ void UBBoardController::clearSceneItems() if (mActiveScene) { freezeW3CWidgets(true); - mActiveScene->clearItems(); + mActiveScene->clearContent(UBGraphicsScene::clearItems); updateActionStates(); } } @@ -704,7 +704,7 @@ void UBBoardController::clearSceneAnnotation() { if (mActiveScene) { - mActiveScene->clearAnnotations(); + mActiveScene->clearContent(UBGraphicsScene::clearAnnotations); updateActionStates(); } } @@ -713,7 +713,7 @@ void UBBoardController::clearSceneBackground() { if (mActiveScene) { - mActiveScene->clearBackground(); + mActiveScene->clearContent(UBGraphicsScene::clearBackground); updateActionStates(); } } diff --git a/src/desktop/UBDesktopAnnotationController.cpp b/src/desktop/UBDesktopAnnotationController.cpp index e86dca46..b95b433d 100644 --- a/src/desktop/UBDesktopAnnotationController.cpp +++ b/src/desktop/UBDesktopAnnotationController.cpp @@ -274,7 +274,7 @@ void UBDesktopAnnotationController::eraseDesktopAnnotations() { if (mTransparentDrawingScene) { - mTransparentDrawingScene->clearAnnotations(); + mTransparentDrawingScene->clearContent(UBGraphicsScene::clearAnnotations); } } diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index 95b95af3..818eb88e 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -78,7 +78,10 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) QTransform newItemTransform(itemTransform); item->setPos(mapFromItem(item, 0, 0)); - item->scene()->removeItem(item); + if (item->scene()) { + item->scene()->removeItem(item); + } + if (corescene()) corescene()->removeItemFromDeletion(item); item->setParentItem(this); diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index 6c0349e4..d5620d12 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -387,12 +387,25 @@ void UBGraphicsItemDelegate::remove(bool canUndo) UBGraphicsScene* scene = dynamic_cast(mDelegated->scene()); if (scene) { - foreach(DelegateButton* button, mButtons) - scene->removeItem(button); +// bool shownOnDisplay = mDelegated->data(UBGraphicsItemData::ItemLayerType).toInt() != UBItemLayerType::Control; +// showHide(shownOnDisplay); +// updateFrame(); +// updateButtons(); + + if (mFrame && !mFrame->scene() && mDelegated->scene()) + { + mDelegated->scene()->addItem(mFrame); + } + mFrame->setAntiScale(mAntiScaleRatio); + mFrame->positionHandles(); + updateButtons(true); + foreach(DelegateButton* button, mButtons) { + scene->removeItem(button); + } scene->removeItem(mFrame); - /* this is performed because when removing delegated from scene while it contains flash content, segfault happens because of QGraphicsScene::removeItem() */ + /* 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(mDelegated); if (mDelegated_casted) mDelegated_casted->setHtml(QString()); diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index c782c94b..01ef854b 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -244,6 +244,7 @@ class UBGraphicsItemDelegate : public QObject UBGraphicsToolBarItem* getToolBarItem() const { return mToolBarItem; } qreal antiScaleRatio() const { return mAntiScaleRatio; } + virtual void update() {positionHandles();} signals: void showOnDisplayChanged(bool shown); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index d5eb8d36..c60257ab 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1071,115 +1071,72 @@ UBItem* UBGraphicsScene::deepCopy() const return sceneDeepCopy(); } -void UBGraphicsScene::clearItemsAndAnnotations() +void UBGraphicsScene::clearContent(clearCase pCase) { - deselectAllItems(); - - QSet emptyList; - QSet removedItems; - - QList sceneItems = items(); - foreach(QGraphicsItem* item, sceneItems) - { - if(!mTools.contains(item) && !isBackgroundObject(item)) - { - removeItem(item); - removedItems << item; - } - } - - // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint - update(sceneRect()); - - if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented - UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList); - UBApplication::undoStack->push(uc); - } - - setDocumentUpdated(); -} - -bool isService(QGraphicsItem *item) { - return (item->type() == UBGraphicsDelegateFrame::Type) - || (item->parentItem() && item->parentItem()->Type == UBGraphicsDelegateFrame::Type); -} - -void UBGraphicsScene::clearItems() -{ - deselectAllItems(); - - QSet emptyList; QSet removedItems; - QList sceneItems = items(); - foreach(QGraphicsItem* item, sceneItems) - { - bool isGroup = qgraphicsitem_cast(item) != NULL; - bool isPolygon = qgraphicsitem_cast(item) != NULL; - bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; - - bool inGroup = (item->parentItem() - && (item->parentItem()->type() == UBGraphicsGroupContainerItem::Type)); - - if(!isGroup && !isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) { - removeItem(item); - } - if (!inGroup || !isService(item)) { - removedItems << item; - } - } - - // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint - update(sceneRect()); - - - if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented - UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList); - UBApplication::undoStack->push(uc); - } + switch (pCase) { + case clearBackground : + removeItem(mBackgroundObject); + removedItems << mBackgroundObject; + break; + + case clearItemsAndAnnotations : + case clearItems : + case clearAnnotations : + foreach(QGraphicsItem* item, items()) { + + bool isGroup = item->type() == UBGraphicsGroupContainerItem::Type; + bool isStrokesGroup = item->type() == UBGraphicsStrokesGroup::Type; + + UBGraphicsGroupContainerItem *itemGroup = item->parentItem() + ? qgraphicsitem_cast(item->parentItem()) + : 0; + UBGraphicsItemDelegate *curDelegate = UBGraphicsItem::Delegate(item); + if (!curDelegate) { + continue; + } - setDocumentUpdated(); -} + bool shouldDelete = false; + switch (static_cast(pCase)) { + case clearAnnotations : + shouldDelete = isStrokesGroup; + break; + case clearItems : + shouldDelete = !isGroup && !isBackgroundObject(item) && !isStrokesGroup; + break; + case clearItemsAndAnnotations: + shouldDelete = !isGroup && !isBackgroundObject(item); + break; + } -void UBGraphicsScene::clearAnnotations() -{ - QSet emptyList; - QSet removedItems; + if(shouldDelete) { + if (itemGroup) { + itemGroup->removeFromGroup(item); + if (itemGroup->childItems().count() == 1) { + itemGroup->destroy(); + } + itemGroup->Delegate()->update(); + } - QList sceneItems = items(); - foreach(QGraphicsItem* item, sceneItems) - { - UBGraphicsStrokesGroup* pi = qgraphicsitem_cast(item); - if (pi) - { - removeItem(item); - removedItems << item; + curDelegate->remove(false); + removedItems << item; + } } + break; } // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint update(sceneRect()); if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented - UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList); + UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, QSet()); UBApplication::undoStack->push(uc); } - setDocumentUpdated(); -} - -void UBGraphicsScene::clearBackground() -{ - if(mBackgroundObject){ - removeItem(mBackgroundObject); - - if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented - UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, mBackgroundObject, NULL); - UBApplication::undoStack->push(uc); - } + if (pCase == clearBackground) { mBackgroundObject = 0; } - update(sceneRect()); setDocumentUpdated(); } @@ -1373,8 +1330,8 @@ UBGraphicsW3CWidgetItem* UBGraphicsScene::addOEmbed(const QUrl& pContentUrl, con UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QList items) { UBGraphicsGroupContainerItem *groupItem = new UBGraphicsGroupContainerItem(); - addItem(groupItem); + addItem(groupItem); foreach (QGraphicsItem *item, items) { if (item->type() == UBGraphicsGroupContainerItem::Type) { QList childItems = item->childItems(); @@ -1609,8 +1566,6 @@ void UBGraphicsScene::addItems(const QSet& items) void UBGraphicsScene::removeItem(QGraphicsItem* item) { - UBGraphicsGroupContainerItem* group = qgraphicsitem_cast(item->parentItem()); - item->setSelected(false); UBCoreGraphicsScene::removeItem(item); UBApplication::boardController->freezeW3CWidget(item, true); @@ -1619,15 +1574,6 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) --mItemCount; mFastAccessItems.removeAll(item); - -// if (group) -// { -// if (group->childItems().empty()) -// { -// group->Delegate()->remove(); -// UBCoreGraphicsScene::removeItemFromDeletion(group); -// } -// } } void UBGraphicsScene::removeItems(const QSet& items) diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index 6f8c8def..0dedb9c1 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -101,6 +101,13 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem public: + enum clearCase { + clearItemsAndAnnotations = 0 + , clearAnnotations + , clearItems + , clearBackground + }; + // tmp stub for divide addings scene objects from undo mechanism implementation void setURStackEnable(bool set = true) {enableUndoRedoStack = set;} bool isURStackIsEnabled(){ return enableUndoRedoStack;} @@ -114,10 +121,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem UBGraphicsScene* sceneDeepCopy() const; - void clearItemsAndAnnotations(); - void clearItems(); - void clearAnnotations(); - void clearBackground(); + void clearContent(clearCase pCase = clearItemsAndAnnotations); bool inputDevicePress(const QPointF& scenePos, const qreal& pressure = 1.0); bool inputDeviceMove(const QPointF& scenePos, const qreal& pressure = 1.0); diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index 6e7e730e..9f7b5fdb 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -263,6 +263,11 @@ void UBGraphicsTextItemDelegate::setEditable(bool editable) mDelegated->setData(UBGraphicsItemData::ItemEditable, QVariant(false)); } } +void UBGraphicsTextItemDelegate::remove(bool canUndo) +{ + UBGraphicsItemDelegate::remove(canUndo); +} + bool UBGraphicsTextItemDelegate::isEditable() { return mDelegated->data(UBGraphicsItemData::ItemEditable).toBool(); @@ -419,8 +424,8 @@ QVariant UBGraphicsTextItemDelegate::itemChange(QGraphicsItem::GraphicsItemChang QTextCursor c = delegated()->textCursor(); if (c.hasSelection()) { - c.clearSelection(); - delegated()->setTextCursor(c); + c.clearSelection(); + delegated()->setTextCursor(c); } } } diff --git a/src/domain/UBGraphicsTextItemDelegate.h b/src/domain/UBGraphicsTextItemDelegate.h index 26b3ba9b..2cf6f447 100644 --- a/src/domain/UBGraphicsTextItemDelegate.h +++ b/src/domain/UBGraphicsTextItemDelegate.h @@ -46,6 +46,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate public slots: void contentsChanged(); virtual void setEditable(bool); + virtual void remove(bool canUndo); protected: virtual void buildButtons(); diff --git a/src/domain/UBItem.cpp b/src/domain/UBItem.cpp index 9d999a94..10d3d6ce 100644 --- a/src/domain/UBItem.cpp +++ b/src/domain/UBItem.cpp @@ -17,6 +17,15 @@ #include "core/memcheck.h" +#include "domain/UBGraphicsPixmapItem.h" +#include "domain/UBGraphicsTextItem.h" +#include "domain/UBGraphicsSvgItem.h" +#include "domain/UBGraphicsMediaItem.h" +#include "domain/UBGraphicsStrokesGroup.h" +#include "domain/UBGraphicsGroupContainerItem.h" +#include "domain/UBGraphicsWidgetItem.h" +#include "tools/UBGraphicsCurtainItem.h" + UBItem::UBItem() : mUuid(QUuid()) , mRenderingQuality(UBItem::RenderingQualityNormal) @@ -44,3 +53,37 @@ bool UBGraphicsItem::isRotatable(QGraphicsItem *item) { return item->data(UBGraphicsItemData::ItemRotatable).toBool(); } + +UBGraphicsItemDelegate *UBGraphicsItem::Delegate(QGraphicsItem *pItem) +{ + UBGraphicsItemDelegate *result = 0; + + switch (static_cast(pItem->type())) { + case UBGraphicsPixmapItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsTextItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsSvgItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsMediaItem::Type: + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsStrokesGroup::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsGroupContainerItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsWidgetItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + case UBGraphicsCurtainItem::Type : + result = (static_cast(pItem))->Delegate(); + break; + } + + return result; +} diff --git a/src/domain/UBItem.h b/src/domain/UBItem.h index 99c3e6a6..ca8a0f3b 100644 --- a/src/domain/UBItem.h +++ b/src/domain/UBItem.h @@ -108,6 +108,7 @@ public: static bool isRotatable(QGraphicsItem *item); static bool isFlippable(QGraphicsItem *item); + static UBGraphicsItemDelegate *Delegate(QGraphicsItem *pItem); virtual UBGraphicsItemDelegate *Delegate() const = 0; virtual void remove() = 0; From 5f30e45d97918a8b006ed3c6f97588f2b49aef8f Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 4 Sep 2012 17:53:33 +0300 Subject: [PATCH 07/10] SANKORE-523 Changing the languages of the virtual keyboard crashes the software --- src/frameworks/UBPlatformUtils_mac.mm | 5 +++++ src/gui/UBKeyboardPalette_mac.cpp | 1 + 2 files changed, 6 insertions(+) diff --git a/src/frameworks/UBPlatformUtils_mac.mm b/src/frameworks/UBPlatformUtils_mac.mm index 66191a95..d62e9f2e 100644 --- a/src/frameworks/UBPlatformUtils_mac.mm +++ b/src/frameworks/UBPlatformUtils_mac.mm @@ -440,6 +440,9 @@ void UBPlatformUtils::initializeKeyboardLayouts() int count = CFArrayGetCount(kbds); QList result; + qDebug() << "initializeKeyboardLayouts"; + qDebug() << "Found system locales: " << count; + for(int i=0; i Date: Tue, 4 Sep 2012 18:04:18 +0300 Subject: [PATCH 08/10] SANKORE-523 Changing the languages of the virtual keyboard crashes the software --- src/frameworks/UBPlatformUtils.h | 40 ++++++++++++++---------- src/frameworks/UBPlatformUtils_linux.cpp | 10 +++--- src/frameworks/UBPlatformUtils_win.cpp | 15 ++++++--- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/frameworks/UBPlatformUtils.h b/src/frameworks/UBPlatformUtils.h index ebac3995..29af417e 100644 --- a/src/frameworks/UBPlatformUtils.h +++ b/src/frameworks/UBPlatformUtils.h @@ -19,6 +19,11 @@ #include #include +#ifdef Q_WS_MACX + #import +#endif + + class QMainWindow; #define SYMBOL_KEYS_COUNT 47 @@ -125,28 +130,31 @@ struct KEYBT class UBKeyboardLocale { public: - UBKeyboardLocale(const QString& _fullName, - const QString& _name, - const QString& _id, - QIcon* _icon, - KEYBT** _symbols) - :fullName(_fullName),name(_name), id(_id), icon(_icon), - constSymbols(NULL), varSymbols(_symbols) - {} - UBKeyboardLocale(const QString& _fullName, - const QString& _name, - const QString& _id, - QIcon* _icon, - KEYBT _symbols[]) - :fullName(_fullName),name(_name), id(_id), icon(_icon), + #ifdef Q_WS_MACX + UBKeyboardLocale(const QString& _fullName, + const QString& _name, + TISInputSourceRef _tisInputSourceRef, + QIcon* _icon, + KEYBT** _symbols) + :fullName(_fullName),name(_name), tisInputSourceRef(_tisInputSourceRef), + icon(_icon),constSymbols(NULL), varSymbols(_symbols) + {} + + TISInputSourceRef tisInputSourceRef; + #else + UBKeyboardLocale(const QString& _fullName, + const QString& _name, + QIcon* _icon, + KEYBT _symbols[]) + :fullName(_fullName),name(_name), icon(_icon), constSymbols(_symbols), varSymbols(NULL) - {} + {} + #endif ~UBKeyboardLocale(); const QString fullName; const QString name; - const QString id; QIcon* icon; KEYBT* operator[] (int index) const { diff --git a/src/frameworks/UBPlatformUtils_linux.cpp b/src/frameworks/UBPlatformUtils_linux.cpp index 8c10c4c9..411d812a 100644 --- a/src/frameworks/UBPlatformUtils_linux.cpp +++ b/src/frameworks/UBPlatformUtils_linux.cpp @@ -399,11 +399,11 @@ void UBPlatformUtils::initializeKeyboardLayouts() { nKeyboardLayouts = 5; keyboardLayouts = new UBKeyboardLocale*[nKeyboardLayouts]; - keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", "", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); - keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", "", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); - keyboardLayouts[2] = new UBKeyboardLocale(tr("German"), "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); - keyboardLayouts[3] = new UBKeyboardLocale(tr("French"), "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); - keyboardLayouts[4] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); + keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); + keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); + keyboardLayouts[2] = new UBKeyboardLocale(tr("German"), "de", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); + keyboardLayouts[3] = new UBKeyboardLocale(tr("French"), "fr", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); + keyboardLayouts[4] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); } void UBPlatformUtils::destroyKeyboardLayouts() diff --git a/src/frameworks/UBPlatformUtils_win.cpp b/src/frameworks/UBPlatformUtils_win.cpp index 95a6970e..f7c67f8b 100644 --- a/src/frameworks/UBPlatformUtils_win.cpp +++ b/src/frameworks/UBPlatformUtils_win.cpp @@ -407,11 +407,16 @@ void UBPlatformUtils::initializeKeyboardLayouts() { nKeyboardLayouts = 5; keyboardLayouts = new UBKeyboardLocale*[nKeyboardLayouts]; - keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", "", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); - keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", "", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); - keyboardLayouts[2] = new UBKeyboardLocale(tr("French"), "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); - keyboardLayouts[3] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); - keyboardLayouts[4] = new UBKeyboardLocale(tr("German"), "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); + keyboardLayouts[0] = new UBKeyboardLocale(tr("English"),"en", + new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); + keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", + new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); + keyboardLayouts[2] = new UBKeyboardLocale(tr("French"), "fr", + new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); + keyboardLayouts[3] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", + new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); + keyboardLayouts[4] = new UBKeyboardLocale(tr("German"), "de", + new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); } void UBPlatformUtils::destroyKeyboardLayouts() From 34c6aa28a98b2adef9f35681f0e5fea4908c9341 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 4 Sep 2012 19:58:18 +0300 Subject: [PATCH 09/10] Reversed changed... --- src/frameworks/UBPlatformUtils.h | 40 ++++++++++-------------- src/frameworks/UBPlatformUtils_linux.cpp | 10 +++--- src/frameworks/UBPlatformUtils_win.cpp | 15 +++------ 3 files changed, 26 insertions(+), 39 deletions(-) diff --git a/src/frameworks/UBPlatformUtils.h b/src/frameworks/UBPlatformUtils.h index 29af417e..ebac3995 100644 --- a/src/frameworks/UBPlatformUtils.h +++ b/src/frameworks/UBPlatformUtils.h @@ -19,11 +19,6 @@ #include #include -#ifdef Q_WS_MACX - #import -#endif - - class QMainWindow; #define SYMBOL_KEYS_COUNT 47 @@ -130,31 +125,28 @@ struct KEYBT class UBKeyboardLocale { public: - #ifdef Q_WS_MACX - UBKeyboardLocale(const QString& _fullName, - const QString& _name, - TISInputSourceRef _tisInputSourceRef, - QIcon* _icon, - KEYBT** _symbols) - :fullName(_fullName),name(_name), tisInputSourceRef(_tisInputSourceRef), - icon(_icon),constSymbols(NULL), varSymbols(_symbols) - {} - - TISInputSourceRef tisInputSourceRef; - #else - UBKeyboardLocale(const QString& _fullName, - const QString& _name, - QIcon* _icon, - KEYBT _symbols[]) - :fullName(_fullName),name(_name), icon(_icon), + UBKeyboardLocale(const QString& _fullName, + const QString& _name, + const QString& _id, + QIcon* _icon, + KEYBT** _symbols) + :fullName(_fullName),name(_name), id(_id), icon(_icon), + constSymbols(NULL), varSymbols(_symbols) + {} + UBKeyboardLocale(const QString& _fullName, + const QString& _name, + const QString& _id, + QIcon* _icon, + KEYBT _symbols[]) + :fullName(_fullName),name(_name), id(_id), icon(_icon), constSymbols(_symbols), varSymbols(NULL) - {} - #endif + {} ~UBKeyboardLocale(); const QString fullName; const QString name; + const QString id; QIcon* icon; KEYBT* operator[] (int index) const { diff --git a/src/frameworks/UBPlatformUtils_linux.cpp b/src/frameworks/UBPlatformUtils_linux.cpp index 411d812a..8c10c4c9 100644 --- a/src/frameworks/UBPlatformUtils_linux.cpp +++ b/src/frameworks/UBPlatformUtils_linux.cpp @@ -399,11 +399,11 @@ void UBPlatformUtils::initializeKeyboardLayouts() { nKeyboardLayouts = 5; keyboardLayouts = new UBKeyboardLocale*[nKeyboardLayouts]; - keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); - keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); - keyboardLayouts[2] = new UBKeyboardLocale(tr("German"), "de", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); - keyboardLayouts[3] = new UBKeyboardLocale(tr("French"), "fr", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); - keyboardLayouts[4] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); + keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", "", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); + keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", "", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); + keyboardLayouts[2] = new UBKeyboardLocale(tr("German"), "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); + keyboardLayouts[3] = new UBKeyboardLocale(tr("French"), "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); + keyboardLayouts[4] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); } void UBPlatformUtils::destroyKeyboardLayouts() diff --git a/src/frameworks/UBPlatformUtils_win.cpp b/src/frameworks/UBPlatformUtils_win.cpp index f7c67f8b..95a6970e 100644 --- a/src/frameworks/UBPlatformUtils_win.cpp +++ b/src/frameworks/UBPlatformUtils_win.cpp @@ -407,16 +407,11 @@ void UBPlatformUtils::initializeKeyboardLayouts() { nKeyboardLayouts = 5; keyboardLayouts = new UBKeyboardLocale*[nKeyboardLayouts]; - keyboardLayouts[0] = new UBKeyboardLocale(tr("English"),"en", - new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); - keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", - new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); - keyboardLayouts[2] = new UBKeyboardLocale(tr("French"), "fr", - new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); - keyboardLayouts[3] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", - new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); - keyboardLayouts[4] = new UBKeyboardLocale(tr("German"), "de", - new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); + keyboardLayouts[0] = new UBKeyboardLocale(tr("English"), "en", "", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE); + keyboardLayouts[1] = new UBKeyboardLocale(tr("Russian"), "ru", "", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE); + keyboardLayouts[2] = new UBKeyboardLocale(tr("French"), "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE); + keyboardLayouts[3] = new UBKeyboardLocale(tr("Swiss French"), "fr-CH", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE); + keyboardLayouts[4] = new UBKeyboardLocale(tr("German"), "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE); } void UBPlatformUtils::destroyKeyboardLayouts() From ff6332a66f71cdc4379e2233243848cc521a876c Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Wed, 5 Sep 2012 12:34:04 +0300 Subject: [PATCH 10/10] Virtual Keyboard under Mac OS 10.7: switching locales --- src/frameworks/UBPlatformUtils.h | 5 +++++ src/frameworks/UBPlatformUtils_mac.mm | 25 +++++++++++++++++++++++++ src/gui/UBKeyboardPalette_mac.cpp | 19 +------------------ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/frameworks/UBPlatformUtils.h b/src/frameworks/UBPlatformUtils.h index ebac3995..46acb6f6 100644 --- a/src/frameworks/UBPlatformUtils.h +++ b/src/frameworks/UBPlatformUtils.h @@ -171,6 +171,7 @@ class UBPlatformUtils static int nKeyboardLayouts; static UBKeyboardLocale** keyboardLayouts; + public: static void init(); static void destroy(); @@ -192,6 +193,10 @@ public: static UBKeyboardLocale** getKeyboardLayouts(int& nCount); static QString urlFromClipboard(); static QStringList availableTranslations(); + +#ifdef Q_WS_MAC + static void SetMacLocaleByIdentifier(const QString& id); +#endif }; diff --git a/src/frameworks/UBPlatformUtils_mac.mm b/src/frameworks/UBPlatformUtils_mac.mm index d62e9f2e..72dcb75c 100644 --- a/src/frameworks/UBPlatformUtils_mac.mm +++ b/src/frameworks/UBPlatformUtils_mac.mm @@ -570,3 +570,28 @@ QString UBPlatformUtils::urlFromClipboard() */ return qsRet; } + + +void UBPlatformUtils::SetMacLocaleByIdentifier(const QString& id) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + const char * strName = id.toAscii().data(); + + CFStringRef iName = CFStringCreateWithCString(NULL, strName, kCFStringEncodingMacRoman ); + + CFStringRef keys[] = { kTISPropertyInputSourceCategory, kTISPropertyInputSourceID }; + CFStringRef values[] = { kTISCategoryKeyboardInputSource, iName }; + CFDictionaryRef dict = CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 2, NULL, NULL); + CFArrayRef kbds = TISCreateInputSourceList(dict, true); + if (kbds!=NULL) + { + if (CFArrayGetCount(kbds)!=0) + { + TISInputSourceRef klRef = (TISInputSourceRef)CFArrayGetValueAtIndex(kbds, 0); + if (klRef!=NULL) + TISSelectInputSource(klRef); + } + } + [pool drain]; +} diff --git a/src/gui/UBKeyboardPalette_mac.cpp b/src/gui/UBKeyboardPalette_mac.cpp index a8ca7c72..79e48e36 100644 --- a/src/gui/UBKeyboardPalette_mac.cpp +++ b/src/gui/UBKeyboardPalette_mac.cpp @@ -57,23 +57,6 @@ void UBKeyboardPalette::createCtrlButtons() ctrlButtons[8] = new UBLocaleButton(this); } -void SetMacLocaleByIdentifier(const QString& id) -{ - const char * strName = id.toAscii().data(); - - CFStringRef iName = CFStringCreateWithCString(NULL, strName, kCFStringEncodingMacRoman ); - - CFStringRef keys[] = { kTISPropertyInputSourceCategory, kTISPropertyInputSourceID }; - CFStringRef values[] = { kTISCategoryKeyboardInputSource, iName }; - CFDictionaryRef dict = CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 2, NULL, NULL); - CFArrayRef kbds = TISCreateInputSourceList(dict, true); - if (CFArrayGetCount(kbds)!=0) - { - TISInputSourceRef klRef = (TISInputSourceRef)CFArrayGetValueAtIndex(kbds, 0); - if (klRef!=NULL) - TISSelectInputSource(klRef); - } -} void UBKeyboardPalette::checkLayout() @@ -108,6 +91,6 @@ void UBKeyboardPalette::onActivated(bool) void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale) { - SetMacLocaleByIdentifier(locale->id); + UBPlatformUtils::SetMacLocaleByIdentifier(locale->id); }