Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Int: refactoring 1/2
Signed-off-by: Miroslav Safr <Miroslav.Safr@gmail.com>
  • Loading branch information
safrm committed Mar 18, 2014
1 parent 65e70e8 commit 1c76e8b
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 25 deletions.
54 changes: 45 additions & 9 deletions src/dragwidget.cpp
Expand Up @@ -64,7 +64,6 @@ bool dtscomp(QDomElement& left, QDomElement & right) {
return left.attribute("created").toLongLong() < right.attribute("created").toLongLong();
}


DragWidget::DragWidget(QWidget *parent)
: QWidget(parent),
m_NewLabelAction(NULL),
Expand Down Expand Up @@ -159,8 +158,7 @@ void DragWidget::loadTextFile(const QString &sFilename, bool bColorsOn)

void DragWidget::dragEnterEvent(QDragEnterEvent *event)
{

if (event->mimeData()->hasText() || event->mimeData()->hasFormat("application/p1-hotspot")) {
if(canDrop(event->mimeData())) {
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
Expand All @@ -171,18 +169,37 @@ void DragWidget::dragEnterEvent(QDragEnterEvent *event)
event->ignore();
}
}

void DragWidget::dropEvent(QDropEvent *event)
bool DragWidget::canDrop(const QMimeData *mime)
{
/* QString sCurrentObjName = event->mimeData()->objectName();
if (sCurrentObjName == "DragLabel") {
static const QStringList supportedMimes = QStringList() << DragBaseLine::mimeName() << DragLine::mimeName() <<
DragLabel::mimeName() << DragSquare::mimeName();
foreach(QString type, supportedMimes) {
if(mime->formats().contains(type))
return true;
}
*/
if (mime->hasText())
return true;
return false;
}

void DragWidget::dropEvent(QDropEvent *event)
{
selectedItems.clear(); //they are anyway deleted
const QMimeData *mime = event->mimeData();
if (mime->hasFormat(DragBaseLine::mimeName())) {
;
} else if (mime->hasFormat(DragLine::mimeName())) {
;
} else if (mime->hasFormat(DragLabel::mimeName())) {
;
} else if (mime->hasFormat(DragSquare::mimeName())) {
;
} else if (mime->hasText())
{
;
}

if (event->mimeData()->hasText()) {
const QMimeData *mime = event->mimeData();
QPoint position = event->pos();
QPoint hotSpot;
QColor color(Qt::white);
Expand Down Expand Up @@ -336,6 +353,8 @@ void DragWidget::mousePressEvent(QMouseEvent *event)
DragSquare *squareChild(NULL);
DragLine *lineChild(NULL);

QMimeData *mimeData = new QMimeData;

//1 label
if (widget->inherits("DragLabel"))
labelChild = static_cast<DragLabel*>(widget);
Expand All @@ -344,6 +363,8 @@ void DragWidget::mousePressEvent(QMouseEvent *event)
else if (widget->inherits("DragLine"))
lineChild = static_cast<DragLine*>(widget);

// mimeData->setData("text/csv", csvData);


if(labelChild) {
if(widget->parent()->inherits("DragSquare")) {
Expand Down Expand Up @@ -827,3 +848,18 @@ void DragWidget::exportToPicture(const QString &sFilename)
}
}

int DragWidget::dragableObjectsCount() const
{
int iVisibleCount(0), iHiddenCount(0);
foreach (QObject *child, children()) {
if (child->inherits("AbstractDragInterface")) {
QWidget *widget = static_cast<QWidget *>(child);
if (!widget->isVisible())
++iVisibleCount;
else
++iHiddenCount;
}
}
qDebug() << "dragableObjectsCount() visible:" << iVisibleCount << " hidden:" << iHiddenCount;
return iVisibleCount;
}
4 changes: 3 additions & 1 deletion src/dragwidget.h
Expand Up @@ -34,6 +34,7 @@ class QMenu;
class QAction;
class QRubberBand;
class DragLabel;
class QMimeData;
QT_END_NAMESPACE

class DragWidget : public QWidget
Expand Down Expand Up @@ -71,6 +72,7 @@ class DragWidget : public QWidget
void deleteMutliselected();
void changeColorMutliselected(const QColor &acolor);
void exportToPicture(const QString &sFilename);
int dragableObjectsCount() const;

public slots:
void deleteAllItemsSlot();
Expand All @@ -88,7 +90,7 @@ public slots:
virtual void contextMenuEvent ( QContextMenuEvent * event );
virtual void paintEvent(QPaintEvent *);
virtual void resizeEvent(QResizeEvent * event );

bool canDrop(const QMimeData *mime);
private:

QMenu* rightClickMenu();
Expand Down
4 changes: 2 additions & 2 deletions src/shapes/abstractdraginterface.cpp
Expand Up @@ -55,7 +55,7 @@ void AbstractDragInterface::setTimeStamp(qint64 mSecsSinceEpoch)
m_i64TimeStamp = mSecsSinceEpoch;
}

QString AbstractDragInterface::creationTimeStampString()
const QString AbstractDragInterface::creationTimeStampString()
{
QDateTime timeStamp;
#if QT_VERSION >= 0x040700
Expand All @@ -76,7 +76,7 @@ QString AbstractDragInterface::creationTimeStampString()
return timeStamp.toString(AbstractDragInterface::TIMESTAMP_FORMAT);
}

qint64 AbstractDragInterface::creationTimeStamp()
const qint64 AbstractDragInterface::creationTimeStamp()
{
return m_i64TimeStamp;
}
10 changes: 6 additions & 4 deletions src/shapes/abstractdraginterface.h
@@ -1,14 +1,14 @@
#ifndef ABSTRACTDRAGINTERFACE_H
#define ABSTRACTDRAGINTERFACE_H
#include <QColor>
#include <QString>

QT_BEGIN_NAMESPACE
class QMenu;
class DragWidget;
class QDomElement;
QT_END_NAMESPACE



class AbstractDragInterface
{
public:
Expand All @@ -18,13 +18,15 @@ class AbstractDragInterface
virtual QColor currentColor() = 0;
virtual void changeColor(const QColor &acolor) = 0;
virtual void select(bool bSelected) = 0;
virtual void fillXmlElement(QDomElement & element) = 0;

void setTimeStamp(qint64 mSecsSinceEpoch);
QString creationTimeStampString();
qint64 creationTimeStamp();
const QString creationTimeStampString();
const qint64 creationTimeStamp();

enum { BORDER_WIDTH_NO_SELECTED = 2,
BORDER_WIDTH_SELECTED = 4};

protected:
DragWidget* m_CanvasWidget;
qint64 m_i64TimeStamp;
Expand Down
6 changes: 6 additions & 0 deletions src/shapes/dragbaseline.cpp
@@ -1,5 +1,6 @@
#include <QPainter>
#include <QDebug>
#include <QDomElement>

#include "dragbaseline.h"
#include "dragwidget.h"
Expand Down Expand Up @@ -71,3 +72,8 @@ void DragBaseLine::changeColor(const QColor &acolor)
Q_UNUSED(acolor);
//we don't want to change line colors for now
}

void DragBaseLine::fillXmlElement(QDomElement & element)
{

}
3 changes: 3 additions & 0 deletions src/shapes/dragbaseline.h
Expand Up @@ -16,8 +16,11 @@ class DragBaseLine : public QWidget, public AbstractDragInterface
virtual QColor currentColor();
virtual void changeColor(const QColor &acolor);
virtual void select(bool bSelected);
virtual void fillXmlElement(QDomElement & element);

QLine absoluteLine() { return m_AbsoluteLine; }
QLine relativeLine() { return m_RelativeWidgetLine; }
static const QString mimeName() { return "object/x-semaphored-dragbaseline"; }

enum { LINE_WIDTH_SELECTED_HIGHLIGHT = 2 };
enum { LINE_WIDTH_2 = 2,
Expand Down
11 changes: 11 additions & 0 deletions src/shapes/draglabel.cpp
Expand Up @@ -25,6 +25,8 @@
#include <QContextMenuEvent>
#include <QMenu>
#include <QActionGroup>
#include <QDomElement>

#include "draglabel.h"
#include "yelloweditbox.h"
#include "dragwidget.h"
Expand Down Expand Up @@ -183,3 +185,12 @@ void DragLabel::select(bool bSelected)
setLineWidth(BORDER_WIDTH_NO_SELECTED);
}
}

void DragLabel::fillXmlElement(QDomElement & element)
{
element.setAttribute("created", QString::number(creationTimeStamp()));
element.setAttribute("color", currentColor().name());
element.setAttribute("label", text());
element.setAttribute("x", QString::number(pos().x()));
element.setAttribute("y", QString::number(pos().y()));
}
5 changes: 4 additions & 1 deletion src/shapes/draglabel.h
Expand Up @@ -49,10 +49,14 @@ class DragLabel : public QLabel, public AbstractDragInterface
virtual QColor currentColor();
virtual void changeColor(const QColor &acolor);
virtual void select(bool bSelected);
virtual void fillXmlElement(QDomElement & element);

virtual QMenu* rightClickMenu();
static const QString mimeName() { return "object/x-semaphored-draglabel"; }

signals:
void colorChangedSignal();

public slots:
void editSlot();

Expand All @@ -64,7 +68,6 @@ protected :
virtual void contextMenuEvent ( QContextMenuEvent * event );
virtual void mouseDoubleClickEvent ( QMouseEvent * event );


private:
QAction* pWhiteColorAction;
QAction* pGrayColorAction;
Expand Down
6 changes: 6 additions & 0 deletions src/shapes/dragline.cpp
Expand Up @@ -28,6 +28,8 @@
#include <QtGlobal>
#include <QMenu>
#include <QContextMenuEvent>
#include <QDomElement>


DragLine::DragLine(const QPoint & p1, const QPoint & p2, DragWidget *canvasWidget) :
DragBaseLine(p1,p2,canvasWidget),
Expand Down Expand Up @@ -120,3 +122,7 @@ void DragLine::deleteItemSlot()
} else
close();
}

void DragLine::fillXmlElement(QDomElement & element)
{
}
3 changes: 3 additions & 0 deletions src/shapes/dragline.h
Expand Up @@ -33,7 +33,10 @@ class DragLine : public DragBaseLine
//virtual QColor currentColor();
//virtual void changeColor(const QColor &acolor);
//virtual void select(bool bSelected);
virtual void fillXmlElement(QDomElement & element);

virtual QMenu* rightClickMenu();
static const QString mimeName() { return "object/x-semaphored-dragline"; }

protected:
//void paintEvent(QPaintEvent *event);
Expand Down
4 changes: 4 additions & 0 deletions src/shapes/dragsquare.cpp
Expand Up @@ -26,6 +26,7 @@
#include <QTextEdit>
#include <QMenu>
#include <QContextMenuEvent>
#include <QDomElement>

#include "dragsquare.h"
#include "draglabel.h"
Expand Down Expand Up @@ -118,4 +119,7 @@ void DragSquare::select(bool bSelected)
setLineWidth(2);
}

void DragSquare::fillXmlElement(QDomElement & element)
{

}
2 changes: 2 additions & 0 deletions src/shapes/dragsquare.h
Expand Up @@ -45,9 +45,11 @@ class DragSquare : public QFrame , public AbstractDragInterface
virtual QColor currentColor();
virtual void changeColor(const QColor &acolor);
virtual void select(bool bSelected);
virtual void fillXmlElement(QDomElement & element);

DragLabel* labelWidget();

static const QString mimeName() { return "object/x-semaphored-dragsqare"; }
public slots:
void updateColorsSlot();
void editLabelSlot() ;
Expand Down
2 changes: 1 addition & 1 deletion tests/ut_dragbaseline/ut_dragbaseline.cpp
Expand Up @@ -16,6 +16,7 @@ void Ut_DragBaseLine::initTestCase()
void Ut_DragBaseLine::cleanupTestCase()
{
delete dragWidget;
dragWidget = NULL;
}

void Ut_DragBaseLine::init()
Expand Down Expand Up @@ -59,7 +60,6 @@ void Ut_DragBaseLine::testConstruction_data()
QTest::newRow("[400,200] - [200,400]") << QLine(400,200,200,400);
}


void Ut_DragBaseLine::testConstruction()
{
QFETCH(QLine, line);
Expand Down
37 changes: 34 additions & 3 deletions tests/ut_dragwidget/ut_dragwidget.cpp
Expand Up @@ -2,13 +2,14 @@

void Ut_DragWidget::init()
{
//create object

m_subject = new DragWidget();
m_subject->show();
}

void Ut_DragWidget::cleanup()
{
//deleate object
delete m_subject;
m_subject = NULL;
}

//just preparing test deployment
Expand All @@ -17,6 +18,36 @@ void Ut_DragWidget::test1()
bool bTrue=1;
QVERIFY(bTrue==1);
}
void Ut_DragWidget::testLoadSave_data()
{
QTest::addColumn<QString>("filename");
QTest::addColumn<int>("objectCount");
QTest::newRow("screenshot 1") << QString("../../screenshots/ss1.sem") << 10;
QTest::newRow("screenshot 2") << QString("../../screenshots/ss2.sem") << 10;
QTest::newRow("screenshot 3") << QString("../../screenshots/ss3.sem") << 10;
QTest::newRow("screenshot 4") << QString("../../screenshots/ss4.sem") << 10;
}

void Ut_DragWidget::testLoadSave()
{
QFETCH(QString, filename);
QFETCH(int, objectCount);
m_subject->loadProject(filename);
QCOMPARE(objectCount, m_subject->dragableObjectsCount());
m_subject->saveProject(filename + ".testLoadSave");
QCOMPARE(objectCount, m_subject->dragableObjectsCount());

QProcess p;
p.start("/usr/bin/diff", QStringList()
<< filename << filename + ".testLoadSave" );
if ( !p.waitForStarted() )
QFAIL( "process start failed" );

if ( !p.waitForFinished() )
QFAIL( "process finish failed" );

QVERIFY( p.exitCode() == 0 );
}

QTEST_MAIN(Ut_DragWidget)

7 changes: 6 additions & 1 deletion tests/ut_dragwidget/ut_dragwidget.h
Expand Up @@ -5,6 +5,8 @@
#include <QtTest/QtTest>
#include <QObject>

#include <dragwidget.h>

class Ut_DragWidget : public QObject
{
Q_OBJECT
Expand All @@ -14,7 +16,10 @@ private slots:
void cleanup();

void test1();

void testLoadSave_data();
void testLoadSave();
private:
DragWidget *m_subject;
};

#endif // UT_DRAGWIDGET_H
Expand Down

0 comments on commit 1c76e8b

Please sign in to comment.