[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