Common and private frame

preferencesAboutTextFull
Ilia Ryabokon 12 years ago
parent 07a270bffc
commit 741298c0be
  1. 1
      Sankore_3.1.pro
  2. 32
      src/board/UBBoardView.cpp
  3. 118
      src/domain/UBGraphicsItemDelegate.cpp
  4. 9
      src/domain/UBGraphicsItemDelegate.h
  5. 21
      src/domain/UBGraphicsScene.cpp
  6. 5
      src/domain/UBGraphicsScene.h
  7. 105
      src/domain/UBSelectionFrame.cpp
  8. 39
      src/domain/UBSelectionFrame.h
  9. 6
      src/domain/domain.pri

@ -374,6 +374,7 @@ macx {
linux-g++* { linux-g++* {
CONFIG += link_prl CONFIG += link_prl
LIBS += -lcrypto LIBS += -lcrypto
LIBS += -lprofiler
LIBS += -lX11 LIBS += -lX11
QMAKE_CFLAGS += -fopenmp QMAKE_CFLAGS += -fopenmp
QMAKE_CXXFLAGS += -fopenmp QMAKE_CXXFLAGS += -fopenmp

@ -1028,10 +1028,11 @@ void UBBoardView::mousePressEvent (QMouseEvent *event)
} }
else else
{ {
if(mUBRubberBand) if(mUBRubberBand) {
mUBRubberBand->hide(); mUBRubberBand->hide();
scene()->setMultipleSelectionProcess(false); scene()->setMultipleSelectionProcess(false);
} }
}
handleItemMousePress(event); handleItemMousePress(event);
event->accept(); event->accept();
@ -1107,6 +1108,12 @@ void UBBoardView::mousePressEvent (QMouseEvent *event)
void void
UBBoardView::mouseMoveEvent (QMouseEvent *event) UBBoardView::mouseMoveEvent (QMouseEvent *event)
{ {
static QTime lastCallTime;
if (!lastCallTime.isNull()) {
qDebug() << "time interval is " << lastCallTime.msecsTo(QTime::currentTime());
}
QTime mouseMoveTime = QTime::currentTime();
if(!mIsDragInProgress && ((mapToScene(event->pos()) - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance())) if(!mIsDragInProgress && ((mapToScene(event->pos()) - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()))
{ {
return; return;
@ -1153,15 +1160,23 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event)
mUBRubberBand->setGeometry(bandRect); mUBRubberBand->setGeometry(bandRect);
QTime startTime = QTime::currentTime();
QTime testTime = QTime::currentTime();
QList<QGraphicsItem *> rubberItems = items(bandRect); QList<QGraphicsItem *> rubberItems = items(bandRect);
qDebug() << "==================";
qDebug() << "| ====rubber items" << testTime.msecsTo(QTime::currentTime());
testTime = QTime::currentTime();
foreach (QGraphicsItem *item, mJustSelectedItems) { foreach (QGraphicsItem *item, mJustSelectedItems) {
if (!rubberItems.contains(item)) { if (!rubberItems.contains(item)) {
item->setSelected(false); item->setSelected(false);
mJustSelectedItems.remove(item); mJustSelectedItems.remove(item);
} }
} }
qDebug() << "| ===foreach length" << testTime.msecsTo(QTime::currentTime());
testTime = QTime::currentTime();
if (currentTool == UBStylusTool::Selector) int counter = 0;
if (currentTool == UBStylusTool::Selector) {
foreach (QGraphicsItem *item, items(bandRect)) { foreach (QGraphicsItem *item, items(bandRect)) {
if (item->type() == UBGraphicsW3CWidgetItem::Type if (item->type() == UBGraphicsW3CWidgetItem::Type
@ -1172,12 +1187,21 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event)
|| item->type() == UBGraphicsStrokesGroup::Type || item->type() == UBGraphicsStrokesGroup::Type
|| item->type() == UBGraphicsGroupContainerItem::Type) { || item->type() == UBGraphicsGroupContainerItem::Type) {
if (!mJustSelectedItems.contains(item)) { if (!mJustSelectedItems.contains(item)) {
counter++;
item->setSelected(true); item->setSelected(true);
mJustSelectedItems.insert(item); mJustSelectedItems.insert(item);
} }
item->setSelected(true);
}
} }
} }
qDebug() << "| ==selected items count" << counter << endl
<< "| ==selection time" << testTime.msecsTo(QTime::currentTime()) << endl
<< "| =elapsed time " << startTime.msecsTo(QTime::currentTime()) << endl
<< "==================";
} }
} }
@ -1211,6 +1235,8 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event)
if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()) if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance())
mWidgetMoved = true; mWidgetMoved = true;
qDebug() << "mouse move time" << mouseMoveTime.msecsTo(QTime::currentTime());
lastCallTime = QTime::currentTime();
} }
void void
@ -1289,6 +1315,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
if (mUBRubberBand && mUBRubberBand->isVisible()) { if (mUBRubberBand && mUBRubberBand->isVisible()) {
mUBRubberBand->hide(); mUBRubberBand->hide();
scene()->setMultipleSelectionProcess(false); scene()->setMultipleSelectionProcess(false);
scene()->updateMultipleSelectionFrame();
} }
if (bReleaseIsNeed) if (bReleaseIsNeed)
@ -1325,6 +1352,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
if (mRubberBand) { if (mRubberBand) {
mRubberBand->hide (); mRubberBand->hide ();
scene()->setMultipleSelectionProcess(false); scene()->setMultipleSelectionProcess(false);
scene()->updateMultipleSelectionFrame();
} }

@ -179,61 +179,67 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec
void UBGraphicsItemDelegate::init() void UBGraphicsItemDelegate::init()
{ {
// if (mToolBarUsed) //Wrapper function. Use it to set correct data() to QGraphicsItem as well
// mToolBarItem = new UBGraphicsToolBarItem(mDelegated); setFlippable(false);
setRotatable(false);
// mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio);
// mFrame->hide();
// mFrame->setFlag(QGraphicsItem::ItemIsSelectable, true);
// mDeleteButton = new DelegateButton(":/images/close.svg", mDelegated, mFrame, Qt::TopLeftSection);
// mButtons << mDeleteButton;
// connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove()));
// if (canDuplicate()){
// mDuplicateButton = new DelegateButton(":/images/duplicate.svg", mDelegated, mFrame, Qt::TopLeftSection);
// connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate()));
// mButtons << mDuplicateButton;
// }
// mMenuButton = new DelegateButton(":/images/menu.svg", mDelegated, mFrame, Qt::TopLeftSection);
// connect(mMenuButton, SIGNAL(clicked()), this, SLOT(showMenu()));
// mButtons << mMenuButton;
// mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", mDelegated, mFrame, Qt::BottomLeftSection);
// mZOrderUpButton->setShowProgressIndicator(true);
// connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp()));
// connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop()));
// mButtons << mZOrderUpButton;
// mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", mDelegated, mFrame, Qt::BottomLeftSection);
// mZOrderDownButton->setShowProgressIndicator(true);
// connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown()));
// connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom()));
// mButtons << mZOrderDownButton;
// buildButtons();
// foreach(DelegateButton* button, mButtons)
// {
// if (button->getSection() != Qt::TitleBarArea)
// {
// button->hide();
// button->setFlag(QGraphicsItem::ItemIsSelectable, true);
// }
// }
// //Wrapper function. Use it to set correct data() to QGraphicsItem as well
// setFlippable(false);
// setRotatable(false);
} }
void UBGraphicsItemDelegate::createControls() void UBGraphicsItemDelegate::createControls()
{ {
if (mToolBarUsed)
mToolBarItem = new UBGraphicsToolBarItem(mDelegated);
mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio);
mFrame->hide();
mFrame->setFlag(QGraphicsItem::ItemIsSelectable, true);
mDeleteButton = new DelegateButton(":/images/close.svg", mDelegated, mFrame, Qt::TopLeftSection);
mButtons << mDeleteButton;
connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove()));
if (canDuplicate()){
mDuplicateButton = new DelegateButton(":/images/duplicate.svg", mDelegated, mFrame, Qt::TopLeftSection);
connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate()));
mButtons << mDuplicateButton;
}
mMenuButton = new DelegateButton(":/images/menu.svg", mDelegated, mFrame, Qt::TopLeftSection);
connect(mMenuButton, SIGNAL(clicked()), this, SLOT(showMenu()));
mButtons << mMenuButton;
mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", mDelegated, mFrame, Qt::BottomLeftSection);
mZOrderUpButton->setShowProgressIndicator(true);
connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp()));
connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop()));
mButtons << mZOrderUpButton;
mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", mDelegated, mFrame, Qt::BottomLeftSection);
mZOrderDownButton->setShowProgressIndicator(true);
connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown()));
connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom()));
mButtons << mZOrderDownButton;
buildButtons();
foreach(DelegateButton* button, mButtons)
{
if (button->getSection() != Qt::TitleBarArea)
{
button->hide();
button->setFlag(QGraphicsItem::ItemIsSelectable, true);
}
}
} }
void UBGraphicsItemDelegate::freeControls() void UBGraphicsItemDelegate::freeControls()
{ {
QGraphicsScene *controlsScene = delegated()->scene();
UB_FREE_CONTROL(mFrame, controlsScene);
UB_FREE_CONTROL(mDeleteButton, controlsScene);
UB_FREE_CONTROL(mMenuButton, controlsScene);
UB_FREE_CONTROL(mZOrderUpButton, controlsScene);
UB_FREE_CONTROL(mZOrderDownButton, controlsScene);
freeButtons();
} }
@ -266,15 +272,16 @@ QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange ch
} }
// if ((change == QGraphicsItem::ItemSelectedHasChanged if ((change == QGraphicsItem::ItemSelectedHasChanged
// || change == QGraphicsItem::ItemPositionHasChanged || change == QGraphicsItem::ItemPositionHasChanged
// || change == QGraphicsItem::ItemTransformHasChanged) || change == QGraphicsItem::ItemTransformHasChanged)
// && mDelegated->scene() && mDelegated->scene()
// && UBApplication::boardController) && UBApplication::boardController)
// { {
// mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom()); createControls();
// positionHandles(); mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom());
// } positionHandles();
}
if (change == QGraphicsItem::ItemPositionHasChanged if (change == QGraphicsItem::ItemPositionHasChanged
|| change == QGraphicsItem::ItemTransformHasChanged || change == QGraphicsItem::ItemTransformHasChanged
@ -611,6 +618,9 @@ void UBGraphicsItemDelegate::onZoomChanged()
void UBGraphicsItemDelegate::buildButtons() void UBGraphicsItemDelegate::buildButtons()
{ {
} }
void UBGraphicsItemDelegate::freeButtons()
{
}
void UBGraphicsItemDelegate::decorateMenu(QMenu* menu) void UBGraphicsItemDelegate::decorateMenu(QMenu* menu)
{ {

@ -24,6 +24,14 @@
#ifndef UBGRAPHICSITEMDELEGATE_H_ #ifndef UBGRAPHICSITEMDELEGATE_H_
#define UBGRAPHICSITEMDELEGATE_H_ #define UBGRAPHICSITEMDELEGATE_H_
#define UB_FREE_CONTROL(Object, Scene) \
if (Object) { \
if (Scene) { \
Scene->removeItem(Object); \
} \
delete Object; \
} \
#include <QtGui> #include <QtGui>
#include <QtSvg> #include <QtSvg>
#include <QMimeData> #include <QMimeData>
@ -289,6 +297,7 @@ class UBGraphicsItemDelegate : public QObject
protected: protected:
virtual void buildButtons(); virtual void buildButtons();
virtual void freeButtons();
virtual void decorateMenu(QMenu *menu); virtual void decorateMenu(QMenu *menu);
virtual void updateMenuActionState(); virtual void updateMenuActionState();

@ -66,6 +66,7 @@
#include "UBGraphicsPDFItem.h" #include "UBGraphicsPDFItem.h"
#include "UBGraphicsTextItem.h" #include "UBGraphicsTextItem.h"
#include "UBGraphicsStrokesGroup.h" #include "UBGraphicsStrokesGroup.h"
#include "UBSelectionFrame.h"
#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsGroupContainerItem.h"
@ -288,6 +289,7 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent, bool enableUndoRedoSta
, mpLastPolygon(NULL) , mpLastPolygon(NULL)
, mCurrentPolygon(0) , mCurrentPolygon(0)
, mMultipleSelectionProcess(false) , mMultipleSelectionProcess(false)
, mSelectionFrame(0)
{ {
UBCoreGraphicsScene::setObjectName("BoardScene"); UBCoreGraphicsScene::setObjectName("BoardScene");
#ifdef __ppc__ #ifdef __ppc__
@ -296,7 +298,7 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent, bool enableUndoRedoSta
mShouldUseOMP = QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5; mShouldUseOMP = QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5;
#endif #endif
setItemIndexMethod(QGraphicsScene::BspTreeIndex); // setItemIndexMethod(QGraphicsScene::BspTreeIndex);
setUuid(QUuid::createUuid()); setUuid(QUuid::createUuid());
setDocument(parent); setDocument(parent);
@ -1032,6 +1034,23 @@ UBGraphicsPolygonItem* UBGraphicsScene::arcToPolygonItem(const QLineF& pStartRad
return polygonToPolygonItem(polygon); return polygonToPolygonItem(polygon);
} }
void UBGraphicsScene::updateMultipleSelectionFrame()
{
qDebug() << "selected item count" << selectedItems().count();
QList<QGraphicsItem*> selItems = selectedItems();
if (!mSelectionFrame) {
mSelectionFrame = new UBSelectionFrame();
addItem(mSelectionFrame);
}
mSelectionFrame->setEnclosedItems(selItems);
if (!mSelectionFrame->isEmpty()) {
mSelectionFrame->setVisible(true);
} else {
mSelectionFrame->setVisible(false);
}
}
UBGraphicsPolygonItem* UBGraphicsScene::polygonToPolygonItem(const QPolygonF pPolygon) UBGraphicsPolygonItem* UBGraphicsScene::polygonToPolygonItem(const QPolygonF pPolygon)
{ {
UBGraphicsPolygonItem *polygonItem = new UBGraphicsPolygonItem(pPolygon); UBGraphicsPolygonItem *polygonItem = new UBGraphicsPolygonItem(pPolygon);

@ -19,8 +19,6 @@
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>. * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef UBGRAPHICSSCENE_H_ #ifndef UBGRAPHICSSCENE_H_
#define UBGRAPHICSSCENE_H_ #define UBGRAPHICSSCENE_H_
@ -56,6 +54,7 @@ class UBMagnifierParams;
class UBMagnifier; class UBMagnifier;
class UBGraphicsCache; class UBGraphicsCache;
class UBGraphicsGroupContainerItem; class UBGraphicsGroupContainerItem;
class UBSelectionFrame;
const double PI = 4.0 * atan(1.0); const double PI = 4.0 * atan(1.0);
@ -312,6 +311,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
UBGraphicsPolygonItem* polygonToPolygonItem(const QPolygonF pPolygon); UBGraphicsPolygonItem* polygonToPolygonItem(const QPolygonF pPolygon);
void setMultipleSelectionProcess(bool pEnabled) {mMultipleSelectionProcess = pEnabled;} void setMultipleSelectionProcess(bool pEnabled) {mMultipleSelectionProcess = pEnabled;}
bool multipleSelectionProcess() const {return mMultipleSelectionProcess;} bool multipleSelectionProcess() const {return mMultipleSelectionProcess;}
void updateMultipleSelectionFrame();
public slots: public slots:
void initStroke(); void initStroke();
@ -430,6 +430,7 @@ public slots:
bool mDrawWithCompass; bool mDrawWithCompass;
UBGraphicsPolygonItem *mCurrentPolygon; UBGraphicsPolygonItem *mCurrentPolygon;
bool mMultipleSelectionProcess; bool mMultipleSelectionProcess;
UBSelectionFrame *mSelectionFrame;
}; };

@ -0,0 +1,105 @@
#include "UBSelectionFrame.h"
#include <QtGui>
#include "core/UB.h"
#include "domain/UBItem.h"
#include "board/UBBoardController.h"
#include "core/UBSettings.h"
#include "core/UBApplication.h"
UBSelectionFrame::UBSelectionFrame()
: mThickness(UBSettings::settings()->objectFrameWidth)
, mAntiscaleRatio(1.0)
{
setLocalBrush(QBrush(UBSettings::paletteColor));
setPen(Qt::NoPen);
setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));
setFlags(QGraphicsItem::ItemIsMovable);
connect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged(qreal)));
}
void UBSelectionFrame::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
QPainterPath path;
QRectF shRect = option->rect;
path.addRoundedRect(shRect, mThickness / 2, mThickness / 2);
if (rect().width() > 1 && rect().height() > 1) {
QPainterPath extruded;
extruded.addRect(shRect.adjusted(mThickness, mThickness, (mThickness * -1), (mThickness * -1)));
path = path.subtracted(extruded);
}
painter->fillPath(path, mLocalBrush);
}
QRectF UBSelectionFrame::boundingRect() const
{
return rect().adjusted(-mThickness, -mThickness, mThickness, mThickness);
}
QPainterPath UBSelectionFrame::shape() const
{
QPainterPath resShape;
QRectF ownRect = rect();
QRectF shRect = ownRect.adjusted(-mThickness, -mThickness, mThickness, mThickness);
resShape.addRoundedRect(shRect, mThickness / 2, mThickness / 2);
if (rect().width() > 1 && rect().height() > 1) {
QPainterPath extruded;
extruded.addRect(ownRect);
resShape = resShape.subtracted(extruded);
}
return resShape;
}
void UBSelectionFrame::setEnclosedItems(const QList<QGraphicsItem*> pGraphicsItems)
{
QRectF resultRect;
mEnclosedtems.clear();
foreach (QGraphicsItem *nextItem, pGraphicsItems) {
UBGraphicsItemDelegate *nextDelegate = UBGraphicsItem::Delegate(nextItem);
if (nextDelegate) {
mEnclosedtems.append(nextDelegate);
resultRect |= nextItem->boundingRect();
}
}
setRect(resultRect);
if (resultRect.isEmpty()) {
hide();
}
}
void UBSelectionFrame::updateRect()
{
QRectF result;
foreach (UBGraphicsItemDelegate *curDelegateItem, mEnclosedtems) {
result |= curDelegateItem->delegated()->boundingRect();
}
setRect(result);
if (result.isEmpty()) {
setVisible(false);
}
}
void UBSelectionFrame::updateScale()
{
setScale(-UBApplication::boardController->currentZoom());
}
void UBSelectionFrame::onZoomChanged(qreal pZoom)
{
mAntiscaleRatio = pZoom;
updateScale();
}

@ -0,0 +1,39 @@
#ifndef UBSELECTIONFRAME_H
#define UBSELECTIONFRAME_H
#include <QGraphicsRectItem>
#include <QtGui>
class UBGraphicsItemDelegate;
class UBSelectionFrame : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
UBSelectionFrame();
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
QRectF boundingRect() const;
QPainterPath shape() const;
void setLocalBrush(const QBrush &pBrush) {mLocalBrush = pBrush;}
QBrush localBrush() const {return mLocalBrush;}
void setEnclosedItems(const QList<UBGraphicsItemDelegate*> pEncItems) {mEnclosedtems = pEncItems; updateRect();}
void setEnclosedItems(const QList<QGraphicsItem*> pGraphicsItems);
void updateRect();
void updateScale();
bool isEmpty() const {return this->rect().isEmpty();}
private slots:
void setAntiScaleRatio(qreal pAntiscaleRatio) {mAntiscaleRatio = pAntiscaleRatio;}
void onZoomChanged(qreal pZoom);
private:
int mThickness;
qreal mAntiscaleRatio;
QList<UBGraphicsItemDelegate*> mEnclosedtems;
QBrush mLocalBrush;
};
#endif // UBSELECTIONFRAME_H

@ -24,7 +24,8 @@ HEADERS += src/domain/UBGraphicsScene.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 \
src/domain/UBSelectionFrame.h
SOURCES += src/domain/UBGraphicsScene.cpp \ SOURCES += src/domain/UBGraphicsScene.cpp \
src/domain/UBGraphicsItemUndoCommand.cpp \ src/domain/UBGraphicsItemUndoCommand.cpp \
@ -53,4 +54,5 @@ SOURCES += src/domain/UBGraphicsScene.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 \
src/domain/UBSelectionFrame.cpp

Loading…
Cancel
Save