multiple selection

preferencesAboutTextFull
Ivan Ilin 12 years ago
parent 0a1799a514
commit d44cc5b68f
  1. 3
      src/api/api.pri
  2. 44
      src/board/UBBoardView.cpp
  3. 39
      src/domain/UBGraphicsItemDelegate.cpp
  4. 27
      src/domain/UBGraphicsScene.cpp
  5. 4
      src/domain/UBGraphicsScene.h
  6. 2
      src/gui/UBRubberBand.cpp

@ -8,7 +8,4 @@ SOURCES += src/api/UBWidgetUniboardAPI.cpp \
src/api/UBLibraryAPI.cpp \
src/api/UBW3CWidgetAPI.cpp \
src/api/UBWidgetMessageAPI.cpp

@ -46,6 +46,9 @@
#include "domain/UBGraphicsPDFItem.h"
#include "domain/UBGraphicsPolygonItem.h"
#include "domain/UBItem.h"
#include "domain/UBGraphicsVideoItem.h"
#include "domain/UBGraphicsAudioItem.h"
#include "domain/UBGraphicsSvgItem.h"
#include "document/UBDocumentProxy.h"
@ -517,6 +520,8 @@ void UBBoardView::mousePressEvent (QMouseEvent *event)
}
}
QSet<QGraphicsItem*> mJustSelectedItems;
void
UBBoardView::mouseMoveEvent (QMouseEvent *event)
{
@ -538,14 +543,39 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event)
event->accept ();
}
else if (currentTool == UBStylusTool::Selector)
{
if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()) {
return;
}
{
if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()) {
return;
}
if (mUBRubberBand && mUBRubberBand->isVisible()) {
mUBRubberBand->setGeometry(QRect(mMouseDownPos, event->pos()).normalized());
}
if (mUBRubberBand && mUBRubberBand->isVisible()) {
QRect bandRect(mMouseDownPos, event->pos());
bandRect = bandRect.normalized();
mUBRubberBand->setGeometry(bandRect);
QList<QGraphicsItem *> rubberItems = items(bandRect);
foreach (QGraphicsItem *item, mJustSelectedItems) {
if (!rubberItems.contains(item)) {
item->setSelected(false);
mJustSelectedItems.remove(item);
}
}
foreach (QGraphicsItem *item, items(bandRect)) {
if (item->type() == UBGraphicsW3CWidgetItem::Type
|| item->type() == UBGraphicsPixmapItem::Type
|| item->type() == UBGraphicsVideoItem::Type
|| item->type() == UBGraphicsAudioItem::Type
|| item->type() == UBGraphicsSvgItem::Type) {
if (!mJustSelectedItems.contains(item)) {
item->setSelected(true);
mJustSelectedItems.insert(item);
}
}
}
}
if (movingItem && (mMouseButtonIsPressed || mTabletStylusIsPressed))
{

@ -138,6 +138,21 @@ UBGraphicsItemDelegate::~UBGraphicsItemDelegate()
QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
if (change == QGraphicsItem::ItemSelectedHasChanged) {
bool ok;
bool selected = value.toUInt(&ok);
if (ok) {
UBGraphicsScene *ubScene = castUBGraphicsScene();
if (ubScene) {
if (selected) {
ubScene->setSelectedZLevel(delegated());
} else {
ubScene->setOwnZlevel(delegated());
}
}
}
}
if ((change == QGraphicsItem::ItemSelectedHasChanged
|| change == QGraphicsItem::ItemPositionHasChanged
|| change == QGraphicsItem::ItemTransformHasChanged)
@ -145,19 +160,6 @@ QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange ch
{
mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom());
if (mDelegated->isSelected())
{
QList<QGraphicsItem*> items = mDelegated->scene()->selectedItems();
foreach(QGraphicsItem* item, items)
{
if (item != mDelegated)
{
item->setSelected(false);
}
}
}
positionHandles();
}
@ -247,6 +249,17 @@ bool UBGraphicsItemDelegate::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event);
//Deselect all the rest selected items if no ctrl key modifier
if (delegated()->scene()
&& delegated()->scene()->selectedItems().count()
&& event->modifiers() != Qt::ControlModifier) {
foreach (QGraphicsItem *item, delegated()->scene()->selectedItems()) {
if (item != delegated()) {
item->setSelected(false);
}
}
}
commitUndoStep();
return true;

@ -306,17 +306,6 @@ void UBGraphicsScene::selectionChangedProcessing()
if (selectedItems().count())
UBApplication::showMessage("ZValue is " + QString::number(selectedItems().first()->zValue(), 'f') + "own z value is "
+ QString::number(selectedItems().first()->data(UBGraphicsItemData::ItemOwnZValue).toReal(), 'f'));
QList<QGraphicsItem *> allItemsList = items();
for( int i = 0; i < allItemsList.size(); i++ ) {
QGraphicsItem *nextItem = allItemsList.at(i);
if (nextItem->isSelected()) {
nextItem->setZValue(mZLayerController->generateZLevel(itemLayerType::SelectedItem));
} else {
nextItem->setZValue(nextItem->data(UBGraphicsItemData::ItemOwnZValue).toReal());
}
}
}
// MARK: -
@ -492,8 +481,6 @@ bool UBGraphicsScene::inputDeviceRelease()
bool accepted = false;
if (mPointer)
{
mPointer->hide();
@ -1921,17 +1908,13 @@ void UBGraphicsScene::setNominalSize(int pWidth, int pHeight)
setNominalSize(QSize(pWidth, pHeight));
}
void UBGraphicsScene::setSelectedZLevel(QList<QGraphicsItem *> itemList)
{
foreach (QGraphicsItem *item, itemList) {
item->setZValue(mZLayerController->generateZLevel(itemLayerType::SelectedItem));
}
void UBGraphicsScene::setSelectedZLevel(QGraphicsItem * item)
{
item->setZValue(mZLayerController->generateZLevel(itemLayerType::SelectedItem));
}
void UBGraphicsScene::setOwnZlevel(QList<QGraphicsItem *> itemList)
void UBGraphicsScene::setOwnZlevel(QGraphicsItem *item)
{
foreach (QGraphicsItem *item, itemList) {
item->setZValue(item->data(UBGraphicsItemData::ItemOwnZValue).toReal());
}
item->setZValue(item->data(UBGraphicsItemData::ItemOwnZValue).toReal());
}
qreal UBGraphicsScene::changeZLevelTo(QGraphicsItem *item, UBZLayerController::moveDestination dest)

@ -285,8 +285,8 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
return mPreviousPoint;
}
void setSelectedZLevel(QList<QGraphicsItem *> itemList);
void setOwnZlevel(QList<QGraphicsItem *> itemList);
void setSelectedZLevel(QGraphicsItem *item);
void setOwnZlevel(QGraphicsItem *item);
public slots:
void hideEraser();

@ -35,7 +35,7 @@ UBRubberBand::UBRubberBand(Shape s, QWidget * p)
#elif defined(Q_WS_MAC)
customStyle = new QMacStyle();
#elif defined(Q_WS_X11)
customStyle = QStyleFactory::create("oxygen");
// customStyle = QStyleFactory::create("oxygen");
#endif
if (customStyle)

Loading…
Cancel
Save