[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra/text-reviewtool-lukewolf] plugins/textshape: Port ReviewTool over to using TextTool
From: Luke De Mouy <lukewolf101010 () gmail ! com>
Date: 2013-03-01 5:41:35
Message-ID: 20130301054135.9163EA604F () git ! kde ! org
[Download RAW message or body]
Git commit ada173a76b972820c87b7d568923604175148be7 by Luke De Mouy.
Committed on 10/02/2013 at 02:35.
Pushed by ldemouy into branch 'text-reviewtool-lukewolf'.
Port ReviewTool over to using TextTool
M +34 -392 plugins/textshape/ReviewTool.cpp
M +5 -22 plugins/textshape/ReviewTool.h
http://commits.kde.org/calligra/ada173a76b972820c87b7d568923604175148be7
diff --git a/plugins/textshape/ReviewTool.cpp b/plugins/textshape/ReviewTool.cpp
index b1732be..cc471c3 100644
--- a/plugins/textshape/ReviewTool.cpp
+++ b/plugins/textshape/ReviewTool.cpp
@@ -19,6 +19,7 @@
*/
#include "ReviewTool.h"
+#include <KoToolBase.h>
#include <KoCanvasBase.h>
#include <KoTextLayoutRootArea.h>
@@ -47,20 +48,7 @@
#include <KAction>
#include <KUser>
-#include <QHBoxLayout>
-#include <QToolButton>
-#include <QCheckBox>
-#include <QKeyEvent>
-#include <QModelIndex>
-#include <QPainter>
-#include <QPushButton>
-#include <QTextBlock>
-#include <QTreeView>
-#include <QVBoxLayout>
-#include <QVector>
-#include <QLabel>
-
-ReviewTool::ReviewTool(KoCanvasBase* canvas): KoToolBase(canvas),
+ReviewTool::ReviewTool(KoCanvasBase* canvas): TextTool(canvas),
m_textEditor(0),
m_textShapeData(0),
m_canvas(canvas),
@@ -69,6 +57,15 @@ ReviewTool::ReviewTool(KoCanvasBase* canvas): KoToolBase(canvas),
m_trackedChangeManager(0),
m_changesTreeView(0)
{
+ createActions();
+}
+
+ReviewTool::~ReviewTool()
+{
+}
+
+void ReviewTool::createActions()
+{
KAction *action;
action = new KAction(i18n("Tracked change manager"), this);
action->setShortcut(Qt::ALT + Qt::CTRL + Qt::Key_T);
@@ -84,322 +81,51 @@ ReviewTool::ReviewTool(KoCanvasBase* canvas): \
KoToolBase(canvas), m_actionRecordChanges->setCheckable(true);
addAction("edit_record_changes", m_actionRecordChanges);
connect(m_actionRecordChanges, SIGNAL(triggered(bool)), this, \
SLOT(toggleRecordChanges(bool)));
-
- m_configureChangeTracking = new KAction(i18n("Configure Change Tracking..."), \
this);
- addAction("configure_change_tracking", m_configureChangeTracking);
- connect(m_configureChangeTracking, SIGNAL(triggered()), this, \
SLOT(configureChangeTracking()));
-}
-
-ReviewTool::~ReviewTool()
-{
- delete m_trackedChangeManager;
- delete m_model;
}
void ReviewTool::mouseReleaseEvent(KoPointerEvent* event)
{
- event->ignore();
+ TextTool::mouseReleaseEvent(event);
}
-
-void ReviewTool::mouseMoveEvent(KoPointerEvent* event)
+void ReviewTool::activate(KoToolBase::ToolActivation toolActivation, const QSet< \
KoShape* >& shapes) {
- updateSelectedShape(event->point);
- int position = pointToPosition(event->point);
- QTextCursor cursor(m_textShapeData->document());
- cursor.setPosition(position);
-
- int changeId = cursor.charFormat().property(KoCharacterStyle::ChangeTrackerId).toInt();
- if (changeId) {
- m_canvas->setCursor(QCursor(Qt::PointingHandCursor));
- QModelIndex index = m_model->indexForChangeId(changeId);
- m_changesTreeView->setCurrentIndex(index);
- } else {
- m_canvas->setCursor(QCursor(Qt::ArrowCursor));
- m_changesTreeView->setCurrentIndex(QModelIndex());
- }
+ TextTool::activate(toolActivation, shapes);
}
-
-void ReviewTool::mousePressEvent(KoPointerEvent* event)
-{
- int position = pointToPosition(event->point);
- QTextCursor cursor(m_textShapeData->document());
- cursor.setPosition(position);
-
- int changeId = cursor.charFormat().property(KoCharacterStyle::ChangeTrackerId).toInt();
- if (changeId) {
- AcceptRejectChangeDialog \
acceptDialog(KoTextDocument(m_textShapeData->document()).changeTracker(), \
changeId);
- if (int result = acceptDialog.exec()) {
- if (result == (int)(AcceptRejectChangeDialog::eChangeAccepted)) {
- acceptChange();
- } else if (result == (int)(AcceptRejectChangeDialog::eChangeRejected)) {
- rejectChange();
- }
- }
- }
-}
-
-void ReviewTool::updateSelectedShape(const QPointF &point)
-{
- if (! m_textShape->boundingRect().contains(point)) {
- QRectF area(point, QSizeF(1, 1));
- foreach(KoShape *shape, canvas()->shapeManager()->shapesAt(area, true)) {
- TextShape *textShape = dynamic_cast<TextShape*>(shape);
- if (textShape) {
- KoTextShapeData *d = \
static_cast<KoTextShapeData*>(textShape->userData());
- const bool sameDocument = d->document() == \
m_textShapeData->document();
- m_textShape = textShape;
- if (sameDocument)
- break; // stop looking.
- }
- }
- setShapeData(static_cast<KoTextShapeData*>(m_textShape->userData()));
- }
-}
-
-int ReviewTool::pointToPosition(const QPointF & point) const
+void ReviewTool::deactivate()
{
- QPointF p = m_textShape->convertScreenPos(point);
- int caretPos = m_textShapeData->rootArea()->hitTest(p, Qt::FuzzyHit).position;
- return caretPos;
+ TextTool::deactivate();
}
-
-void ReviewTool::paint(QPainter& painter, const KoViewConverter& converter)
+void ReviewTool::mouseMoveEvent(KoPointerEvent* event)
{
- Q_UNUSED(painter);
- Q_UNUSED(converter);
- QTextBlock block = m_textEditor->block();
- if (! block.layout()) // not layouted yet. The Shape paint method will trigger \
a layout
- return;
- if (m_textShapeData == 0)
- return;
-
- if (!m_changesTreeView->currentIndex().isValid())
- return;
-
- QList<QPair<int, int> > changeRanges = \
m_model->changeItemData(m_changesTreeView->currentIndex()).changeRanges;
-
- for (int i = 0; i < changeRanges.size(); ++i) {
- int start = changeRanges.at(i).first;
- int end = changeRanges.at(i).second;
- if (end < start)
- qSwap(start, end);
- QTextCursor cursor;
- cursor.setPosition(start);
- cursor.setPosition(end, QTextCursor::KeepAnchor);
- QList<TextShape *> shapesToPaint;
- KoTextDocumentLayout *lay = \
qobject_cast<KoTextDocumentLayout*>(m_textShapeData->document()->documentLayout());
- if (lay) {
- foreach(KoShape *shape, lay->shapes()) {
- TextShape *ts = dynamic_cast<TextShape*>(shape);
- if (! ts)
- continue;
-
- if (painter.hasClipping()) {
- QRect rect = \
converter.documentToView(ts->boundingRect()).toRect();
- if (painter.clipRegion().intersect(QRegion(rect)).isEmpty())
- continue;
- }
- shapesToPaint << ts;
- }
- }
- if (shapesToPaint.isEmpty()) // quite unlikely, though ;)
- return;
-
- qreal zoomX, zoomY;
- converter.zoom(&zoomX, &zoomY);
-
- foreach(TextShape *ts, shapesToPaint) {
- KoTextShapeData *data = ts->textShapeData();
- Q_ASSERT(data);
- if (data->isDirty())
- continue;
-
- painter.save();
- QTransform shapeMatrix = ts->absoluteTransformation(&converter);
- shapeMatrix.scale(zoomX, zoomY);
- painter.setTransform(shapeMatrix * painter.transform());
- painter.setClipRect(QRectF(QPointF(), ts->size()), Qt::IntersectClip);
- painter.translate(0, -data->documentOffset());
-#if 0 //FIXME refactor to new textlayout
- if (data->isCursorVisible(&cursor)) {
- QVector<QRectF> *clipVec = textRect(cursor);
- QRectF clip;
- foreach(clip, *clipVec) {
- painter.save();
- painter.setClipRect(clip, Qt::IntersectClip);
- painter.fillRect(clip, QBrush(QColor(0,0,0,90)));
- painter.restore();
- }
- delete clipVec;
- }
-#endif
-
- painter.restore();
- }
- }
+ TextTool::mouseMoveEvent(event);
}
-
-
-QRectF ReviewTool::textRect(QTextCursor &cursor) const
+void ReviewTool::mousePressEvent(KoPointerEvent* event)
{
- if (!m_textShapeData)
- return QRectF();
- KoTextDocumentLayout *lay = \
qobject_cast<KoTextDocumentLayout*>(m_textShapeData->document()->documentLayout());
- return lay->selectionBoundingBox(cursor);
+ TextTool::mousePressEvent(event);
}
-
void ReviewTool::keyPressEvent(QKeyEvent* event)
{
- KoToolBase::keyPressEvent(event);
+ TextTool::keyPressEvent(event);
}
-
-void ReviewTool::activate(ToolActivation toolActivation, const QSet<KoShape*> \
&shapes)
-{
- Q_UNUSED(toolActivation);
- foreach(KoShape *shape, shapes) {
- m_textShape = dynamic_cast<TextShape*>(shape);
- if (m_textShape)
- break;
- }
- if (m_textShape == 0) { // none found
- emit done();
- return;
- }
- setShapeData(static_cast<KoTextShapeData*>(m_textShape->userData()));
- useCursor(Qt::ArrowCursor);
-
-
- m_textShape->update();
-
- readConfig();
-}
-
-void ReviewTool::setShapeData(KoTextShapeData *data)
-{
- bool docChanged = data == 0 || m_textShapeData == 0 || \
m_textShapeData->document() != data->document();
-/*
- if (m_textShapeData) {
-// disconnect(m_textShapeData, SIGNAL(destroyed (QObject*)), this, \
SLOT(shapeDataRemoved()));
- KoTextDocumentLayout *lay = \
qobject_cast<KoTextDocumentLayout*>(m_textShapeData->document()->documentLayout());
-// if (lay)
-// disconnect(lay, SIGNAL(shapeAdded(KoShape*)), this, \
SLOT(shapeAddedToDoc(KoShape*)));
- }
-*/
- m_textShapeData = data;
- if (m_textShapeData == 0)
- return;
-// connect(m_textShapeData, SIGNAL(destroyed (QObject*)), this, \
SLOT(shapeDataRemoved()));
- if (docChanged) {
-// if (m_textEditor)
-// disconnect(m_textEditor, SIGNAL(isBidiUpdated()), this, \
SLOT(isBidiUpdated()));
- m_textEditor = KoTextDocument(m_textShapeData->document()).textEditor();
- Q_ASSERT(m_textEditor);
-// connect(m_textEditor, SIGNAL(isBidiUpdated()), this, \
SLOT(isBidiUpdated()));
-
- KoTextDocumentLayout *lay = \
qobject_cast<KoTextDocumentLayout*>(m_textShapeData->document()->documentLayout());
- if (lay) {
-// connect(lay, SIGNAL(shapeAdded(KoShape*)), this, \
SLOT(shapeAddedToDoc(KoShape*)));
- }
- }
-
- if (m_model) {
- disconnect(m_changesTreeView->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, \
SLOT(selectedChangeChanged(QModelIndex,QModelIndex)));
- delete m_model;
- }
- m_model = new TrackedChangeModel(m_textShapeData->document());
- if (m_changesTreeView) {
- QItemSelectionModel *m = m_changesTreeView->selectionModel();
- m_changesTreeView->setModel(m_model);
- delete m;
- connect(m_changesTreeView->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, \
SLOT(selectedChangeChanged(QModelIndex,QModelIndex)));
- m_changesTreeView->reset();
- }
-
- m_changeTracker = KoTextDocument(m_textShapeData->document()).changeTracker();
-}
-
-void ReviewTool::deactivate()
-{
- m_textShape = 0;
- setShapeData(0);
- canvas()->canvasWidget()->setFocus();
-}
-
-QList<QWidget*> ReviewTool::createOptionWidgets()
-{
- QList<QWidget *> widgets;
- QWidget *widget = new QWidget();
- widget->setObjectName("hmm");
-
- m_changesTreeView = new QTreeView(widget);
- m_changesTreeView->setModel(m_model);
- m_changesTreeView->setColumnHidden(0, true);
- connect(m_changesTreeView->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, \
SLOT(selectedChangeChanged(QModelIndex,QModelIndex)));
-
- QVBoxLayout *vLayout = new QVBoxLayout(widget);
- vLayout->addWidget(m_changesTreeView);
- QHBoxLayout *hLayout = new QHBoxLayout;
- QPushButton *accept = new QPushButton(i18n("Accept"));
- QPushButton *reject = new QPushButton(i18n("Reject"));
- hLayout->addWidget(accept);
- hLayout->addWidget(reject);
- vLayout->addLayout(hLayout);
- QCheckBox *showChanges = new QCheckBox(i18n("Show Changes"));
- vLayout->addWidget(showChanges);
- QCheckBox *recordChanges = new QCheckBox(i18n("Record Changes"));
- vLayout->addWidget(recordChanges);
- QToolButton *configureTracing = new QToolButton();
- configureTracing->setDefaultAction(action("configure_change_tracking"));
- vLayout->addWidget(configureTracing);
-
- connect(m_actionShowChanges, SIGNAL(triggered(bool)), showChanges, \
SLOT(setChecked(bool)));
- connect(m_actionRecordChanges, SIGNAL(triggered(bool)), recordChanges, \
SLOT(setChecked(bool)));
- connect(showChanges, SIGNAL(clicked(bool)), this, \
SLOT(toggleShowChanges(bool)));
- connect(recordChanges, SIGNAL(clicked(bool)), this, \
SLOT(toggleRecordChanges(bool)));
- connect(accept, SIGNAL(clicked(bool)), this, SLOT(acceptChange()));
- connect(reject, SIGNAL(clicked(bool)), this, SLOT(rejectChange()));
-
- widget->setWindowTitle(i18n("Changes"));
- widgets.append(widget);
- QWidget *dummy = new QWidget();
- dummy->setObjectName("dummy1");
- dummy->setWindowTitle(i18n("Spell checking"));
- widgets.append(dummy);
- dummy = new QWidget();
- dummy->setObjectName("dummy2");
- dummy->setWindowTitle(i18n("Comments"));
- widgets.append(dummy);
- return widgets;
-}
-
-void ReviewTool::acceptChange()
+void ReviewTool::paint(QPainter& painter, const KoViewConverter& converter)
{
- if (m_changesTreeView->currentIndex().isValid()) {
- AcceptChangeCommand *command = new \
AcceptChangeCommand(m_model->changeItemData(m_changesTreeView->currentIndex()).changeId,
- \
m_model->changeItemData(m_changesTreeView->currentIndex()).changeRanges,
- \
m_textShapeData->document());
- connect(command, SIGNAL(acceptRejectChange()), m_model, SLOT(setupModel()));
- m_textEditor->addCommand(command);
- }
+ TextTool::paint(painter,converter);
}
-void ReviewTool::rejectChange()
+void ReviewTool::showTrackedChangeManager()
{
- if (m_changesTreeView->currentIndex().isValid()) {
- RejectChangeCommand *command = new \
RejectChangeCommand(m_model->changeItemData(m_changesTreeView->currentIndex()).changeId,
- \
m_model->changeItemData(m_changesTreeView->currentIndex()).changeRanges,
- \
m_textShapeData->document());
- connect(command, SIGNAL(acceptRejectChange()), m_model, SLOT(setupModel()));
- m_textEditor->addCommand(command);
- }
+ Q_ASSERT(m_model);
+ m_trackedChangeManager = new TrackedChangeManager();
+ m_trackedChangeManager->setModel(m_model);
+ connect(m_trackedChangeManager, SIGNAL(currentChanged(QModelIndex)), this, \
SLOT(selectedChangeChanged(QModelIndex))); + m_trackedChangeManager->show();
+ // view.setModel(&model);
+ // view.setWindowTitle("testTracked");
+ // view.show();
+ // TrackedChangeManager *dia = new \
TrackedChangeManager(m_textShapeData->document()); + // dia->show();
}
-void ReviewTool::selectedChangeChanged(QModelIndex newItem, QModelIndex \
previousItem)
-{
- Q_UNUSED(newItem);
- Q_UNUSED(previousItem);
- canvas()->updateCanvas(m_textShape->boundingRect());
-}
void ReviewTool::toggleShowChanges(bool on)//TODO transfer this in KoTextEditor
{
@@ -415,87 +141,3 @@ void ReviewTool::toggleRecordChanges(bool on)
if (m_changeTracker)
m_changeTracker->setRecordChanges(on);
}
-
-void ReviewTool::configureChangeTracking()
-{
- if (m_changeTracker) {
- QColor insertionBgColor, deletionBgColor, formatChangeBgColor;
- insertionBgColor = m_changeTracker->getInsertionBgColor();
- deletionBgColor = m_changeTracker->getDeletionBgColor();
- formatChangeBgColor = m_changeTracker->getFormatChangeBgColor();
- QString authorName = m_changeTracker->authorName();
- KoChangeTracker::ChangeSaveFormat changeSaveFormat = \
m_changeTracker->saveFormat();
-
- ChangeConfigureDialog changeDialog(insertionBgColor, deletionBgColor, \
formatChangeBgColor, authorName, changeSaveFormat, \
canvas()->canvasWidget());
-
- if (changeDialog.exec()) {
- m_changeTracker->setInsertionBgColor(changeDialog.getInsertionBgColor());
- m_changeTracker->setDeletionBgColor(changeDialog.getDeletionBgColor());
- m_changeTracker->setFormatChangeBgColor(changeDialog.getFormatChangeBgColor());
- m_changeTracker->setAuthorName(changeDialog.authorName());
- m_changeTracker->setSaveFormat(changeDialog.saveFormat());
- writeConfig();
- }
- }
-}
-
-
-void ReviewTool::readConfig()
-{
- if (m_changeTracker) {
- QColor bgColor, defaultColor;
- QString changeAuthor;
- int changeSaveFormat = KoChangeTracker::DELTAXML;
- KConfigGroup interface = \
KoGlobal::calligraConfig()->group("Change-Tracking");
- if (interface.exists()) {
- bgColor = interface.readEntry("insertionBgColor", defaultColor);
- m_changeTracker->setInsertionBgColor(bgColor);
- bgColor = interface.readEntry("deletionBgColor", defaultColor);
- m_changeTracker->setDeletionBgColor(bgColor);
- bgColor = interface.readEntry("formatChangeBgColor", defaultColor);
- m_changeTracker->setFormatChangeBgColor(bgColor);
- changeAuthor = interface.readEntry("changeAuthor", changeAuthor);
- if (changeAuthor.isEmpty()) {
- KUser user(KUser::UseRealUserID);
- m_changeTracker->setAuthorName(user.property(KUser::FullName).toString());
- } else {
- m_changeTracker->setAuthorName(changeAuthor);
- }
- changeSaveFormat = interface.readEntry("changeSaveFormat", \
changeSaveFormat);
- m_changeTracker->setSaveFormat((KoChangeTracker::ChangeSaveFormat)(changeSaveFormat));
- }
- }
-}
-
-void ReviewTool::writeConfig()
-{
- if (m_changeTracker) {
- KConfigGroup interface = \
KoGlobal::calligraConfig()->group("Change-Tracking");
- interface.writeEntry("insertionBgColor", \
m_changeTracker->getInsertionBgColor());
- interface.writeEntry("deletionBgColor", \
m_changeTracker->getDeletionBgColor());
- interface.writeEntry("formatChangeBgColor", \
m_changeTracker->getFormatChangeBgColor());
- KUser user(KUser::UseRealUserID);
- QString changeAuthor = m_changeTracker->authorName();
- if (changeAuthor != user.property(KUser::FullName).toString()) {
- interface.writeEntry("changeAuthor", changeAuthor);
- }
- interface.writeEntry("changeSaveFormat", \
(int)(m_changeTracker->saveFormat()));
- }
-}
-
-
-void ReviewTool::showTrackedChangeManager()
-{
-/* Q_ASSERT(m_model);
- m_trackedChangeManager = new TrackedChangeManager();
- m_trackedChangeManager->setModel(m_model);
- connect(m_trackedChangeManager, SIGNAL(currentChanged(QModelIndex)), this, \
SLOT(selectedChangeChanged(QModelIndex)));
- m_trackedChangeManager->show();
-*/ // view.setModel(&model);
- // view.setWindowTitle("testTracked");
- // view.show();
- // TrackedChangeManager *dia = new \
TrackedChangeManager(m_textShapeData->document());
- // dia->show();
-}
-
-#include <ReviewTool.moc>
diff --git a/plugins/textshape/ReviewTool.h b/plugins/textshape/ReviewTool.h
index 256f08c..ba8d8c1 100644
--- a/plugins/textshape/ReviewTool.h
+++ b/plugins/textshape/ReviewTool.h
@@ -20,8 +20,6 @@
#ifndef REVIEWTOOL_H
#define REVIEWTOOL_H
-#include <KoToolBase.h>
-
class KoCanvasBase;
class KoPointerEvent;
class KoTextEditor;
@@ -43,12 +41,12 @@ class QTextCursor;
template <class T> class QVector;
/// This tool allows to manipulate the tracked changes of a document. You can accept \
or reject changes.
-class ReviewTool : public KoToolBase
+#include <TextTool.h>
+
+class ReviewTool : public TextTool
{
- Q_OBJECT
public:
explicit ReviewTool(KoCanvasBase *canvas);
-
~ReviewTool();
virtual void mouseReleaseEvent(KoPointerEvent* event);
@@ -58,32 +56,17 @@ public:
virtual void keyPressEvent(QKeyEvent* event);
virtual void activate(ToolActivation toolActivation, const QSet<KoShape*> \
&shapes); virtual void deactivate();
-
-protected:
- virtual QList<QWidget*> createOptionWidgets();
-
- void readConfig();
- void writeConfig();
+ virtual void createActions();
private slots:
- void acceptChange();
- void rejectChange();
- void selectedChangeChanged(QModelIndex newItem, QModelIndex previousItem);
- void setShapeData(KoTextShapeData *data);
void showTrackedChangeManager();
/// When enabled, display changes
void toggleShowChanges(bool);
/// When enabled, make the change tracker record changes made while typing
void toggleRecordChanges(bool);
- /// Configure Change Tracking
- void configureChangeTracking();
private:
- int pointToPosition(const QPointF & point) const;
- QRectF textRect(QTextCursor &cursor) const;
- void updateSelectedShape(const QPointF &point);
-
KAction *m_actionShowChanges;
KAction *m_actionRecordChanges;
KAction *m_configureChangeTracking;
@@ -98,4 +81,4 @@ private:
KoChangeTracker *m_changeTracker;
};
-#endif // CHANGETRACKINGTOOL_H
+#endif // REVIEWTOOL_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic