diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index f60e2b2fa2b6d573835b9a9693ca188873eba712..aad80ad691c42ed1646b7dc03bec3b00121e8778 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -407,6 +407,18 @@ void UBGraphicsItemDelegate::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) } +bool UBGraphicsItemDelegate::keyPressEvent(QKeyEvent *event) +{ + Q_UNUSED(event); + return true; +} + +bool UBGraphicsItemDelegate::keyReleaseEvent(QKeyEvent *event) +{ + Q_UNUSED(event); + return true; +} + QGraphicsItem *UBGraphicsItemDelegate::delegated() { QGraphicsItem *curDelegate = 0; diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index 79ba27cbb888b879f9bd3447d8d287768d35c4ff..b2096b4573d452b3e1c052cb37338a034f6f68da 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -255,6 +255,9 @@ class UBGraphicsItemDelegate : public QObject virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual bool keyPressEvent(QKeyEvent *event); + virtual bool keyReleaseEvent(QKeyEvent *event); + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); virtual UBGraphicsScene *castUBGraphicsScene(); diff --git a/src/domain/UBGraphicsTextItem.cpp b/src/domain/UBGraphicsTextItem.cpp index 3ba635fa7462fe85112533489329240c50307823..3a4fc0d25bfcf1b4eed99655e4b08c231a96ec06 100644 --- a/src/domain/UBGraphicsTextItem.cpp +++ b/src/domain/UBGraphicsTextItem.cpp @@ -201,10 +201,10 @@ void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) if (mMultiClickState == 1) { + QGraphicsTextItem::mouseReleaseEvent(event); + if (Delegate()) Delegate()->mouseReleaseEvent(event); - - QGraphicsTextItem::mouseReleaseEvent(event); } else { @@ -212,6 +212,26 @@ void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } } +void UBGraphicsTextItem::keyPressEvent(QKeyEvent *event) +{ + if (Delegate() && !Delegate()->keyPressEvent(event)) { + qDebug() << "UBGraphicsTextItem::keyPressEvent(QKeyEvent *event) has been rejected by delegate. Don't call base class method"; + return; + } + + QGraphicsTextItem::keyPressEvent(event); +} + +void UBGraphicsTextItem::keyReleaseEvent(QKeyEvent *event) +{ + if (Delegate() && !Delegate()->keyReleaseEvent(event)) { + qDebug() << "UBGraphicsTextItem::keyPressEvent(QKeyEvent *event) has been rejected by delegate. Don't call base class method"; + return; + } + + QGraphicsTextItem::keyReleaseEvent(event); +} + void UBGraphicsTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QColor color = UBSettings::settings()->isDarkBackground() ? mColorOnDarkBackground : mColorOnLightBackground; diff --git a/src/domain/UBGraphicsTextItem.h b/src/domain/UBGraphicsTextItem.h index f44da9419680fcc69f4e0e736edd4df482644bac..fd7e2af4c04e22932553f2f3a25f1252c6aca283 100644 --- a/src/domain/UBGraphicsTextItem.h +++ b/src/domain/UBGraphicsTextItem.h @@ -110,6 +110,9 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index 3c22d6d9497718ffdeaba5eb59d0f54291e3a9c3..b724494be003a4ef876a27e3cd2850fe0bf8c2f6 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -334,6 +334,8 @@ void UBGraphicsTextItemDelegate::alignButtonProcess() AlignTextButton *asAlText = static_cast<AlignTextButton*>(mAlignButton); if (asAlText->nextKind() == AlignTextButton::k_mixed) { restoreTextCursorFormats(); + asAlText->setNextKind(); + return; } asAlText->setNextKind(); @@ -366,14 +368,19 @@ void UBGraphicsTextItemDelegate::onCursorPositionChanged(const QTextCursor &curs qDebug() << "-----------------------"; qDebug() << "we have a selection!" << cursor.selectionStart(); qDebug() << "-----------------------"; - updateAlighButtonState(); +// updateAlighButtonState(); } void UBGraphicsTextItemDelegate::onModificationChanged(bool ch) { Q_UNUSED(ch); qDebug() << "modification changed"; - updateAlighButtonState(); +// updateAlighButtonState(); +} + +void UBGraphicsTextItemDelegate::onContentChanged() +{ + qDebug() << "onContentChanged"; } UBGraphicsTextItem* UBGraphicsTextItemDelegate::delegated() @@ -502,6 +509,31 @@ bool UBGraphicsTextItemDelegate::mouseReleaseEvent(QGraphicsSceneMouseEvent *eve return true; } +bool UBGraphicsTextItemDelegate::keyPressEvent(QKeyEvent *event) +{ + Q_UNUSED(event); + return true; +} + +bool UBGraphicsTextItemDelegate::keyReleaseEvent(QKeyEvent *event) +{ + if (!delegated()->hasFocus()) { + return true; + } + + switch (event->key()) { + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Up: + case Qt::Key_Down: + updateAlighButtonState(); + break; + } + + qDebug() << "Key has been released" << QString::number(event->key(), 16); + return true; +} + void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode changeMode) { if (scaleSize == changeMode) @@ -609,6 +641,7 @@ void UBGraphicsTextItemDelegate::updateAlighButtonState() return; } + qDebug() << "new cursor position" << delegated()->textCursor().position(); AlignTextButton *asAlBtn = static_cast<AlignTextButton*>(mAlignButton); if (!oneBlockSelection()) { diff --git a/src/domain/UBGraphicsTextItemDelegate.h b/src/domain/UBGraphicsTextItemDelegate.h index a6b4c5b15eed41111db8a4fe00f34c5180b10ed6..1614a24d2474c1c127fc2173389d81e34e254675 100644 --- a/src/domain/UBGraphicsTextItemDelegate.h +++ b/src/domain/UBGraphicsTextItemDelegate.h @@ -129,6 +129,9 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate virtual bool mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual bool mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual bool keyPressEvent(QKeyEvent *event); + virtual bool keyReleaseEvent(QKeyEvent *event); + private: UBGraphicsTextItem* delegated(); @@ -179,6 +182,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate void alignButtonProcess(); void onCursorPositionChanged(const QTextCursor& cursor); void onModificationChanged(bool ch); + void onContentChanged(); private: const int delta;