~librecad-dev/librecad/librecad

1 by Scott Howard
first commit
1
/****************************************************************************
2
**
3
** This file is part of the LibreCAD project, a 2D CAD program
4
**
5
** Copyright (C) 2011 Rallaz (rallazz@gmail.com)
6
** Copyright (C) 2010 R. van Twisk (librecad@rvt.dds.nl)
7
**
8
**
9
** This file is free software; you can redistribute it and/or modify
10
** it under the terms of the GNU General Public License as published by
11
** the Free Software Foundation; either version 2 of the License, or
12
** (at your option) any later version.
13
**
14
** This program is distributed in the hope that it will be useful,
15
** but WITHOUT ANY WARRANTY; without even the implied warranty of
16
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
** GNU General Public License for more details.
18
** 
19
** You should have received a copy of the GNU General Public License
20
** along with this program; if not, write to the Free Software
21
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22
**
23
** This copyright notice MUST APPEAR in all copies of the script!  
24
**
25
**********************************************************************/
26
27
#include "qc_actiongetpoint.h"
28
29
#include "rs_snapper.h"
30
#include "rs_dialogfactory.h"
31
#include "rs_graphicview.h"
32
33
34
35
QC_ActionGetPoint::QC_ActionGetPoint(RS_EntityContainer& container,
36
        RS_GraphicView& graphicView)
37
        :RS_PreviewActionInterface("Get Point",
38
                           container, graphicView) {
39
    completed = false;
40
    mesage = tr("Specify a point");
41
    setTargetPoint = false;
42
}
43
44
45
void QC_ActionGetPoint::trigger() {
46
47
    RS_DEBUG->print("QC_ActionGetPoint::trigger()");
48
    completed = true;
49
    updateMouseButtonHints();
50
}
51
52
53
void QC_ActionGetPoint::mouseMoveEvent(QMouseEvent* e) {
54
    RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent begin");
55
56
        RS_Vector mouse = snapPoint(e);
57
        if(setTargetPoint){
58
            if (referencePoint.valid) {
59
                targetPoint = mouse;
60
                deletePreview();
61
                RS_Line *line =new RS_Line(preview,
62
                                       RS_LineData(referencePoint, mouse));
63
                line->setPen(RS_Pen(RS_Color(0,0,0), RS2::Width00, RS2::DotLine ));
64
                preview->addEntity(line);
65
                RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent: draw preview");
66
                drawPreview();
67
                preview->addSelectionFrom(*container);
68
            }
69
        } else {
70
            targetPoint = mouse;
71
        }
72
73
    RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent end");
74
}
75
76
77
78
void QC_ActionGetPoint::mouseReleaseEvent(QMouseEvent* e) {
79
    if (e->button()==Qt::LeftButton) {
80
        RS_CoordinateEvent ce(snapPoint(e));
81
        coordinateEvent(&ce);
82
    } else if (e->button()==Qt::RightButton) {
83
        init(getStatus()-1);
84
    }
85
}
86
87
void QC_ActionGetPoint::coordinateEvent(RS_CoordinateEvent* e) {
88
89
    if (e==NULL) {
90
        return;
91
    }
92
93
    RS_Vector pos = e->getCoordinate();
94
95
        targetPoint = pos;
96
        graphicView->moveRelativeZero(targetPoint);
97
        trigger();
98
}
99
100
101
void QC_ActionGetPoint::updateMouseButtonHints() {
102
    if (!completed)
103
        RS_DIALOGFACTORY->updateMouseWidget(mesage, tr("Cancel"));
104
    else
105
        RS_DIALOGFACTORY->updateMouseWidget("", "");
106
}
107
108
109
void QC_ActionGetPoint::updateMouseCursor() {
110
    graphicView->setMouseCursor(RS2::CadCursor);
111
}
112
113
114
void QC_ActionGetPoint::setBasepoint(QPointF* basepoint){
115
    referencePoint.x = basepoint->x();
116
    referencePoint.y = basepoint->y();
117
    setTargetPoint = true;
118
}
119
120
121
void QC_ActionGetPoint::setMesage(QString msg){
122
    mesage = msg;
123
}
124
125
126
void QC_ActionGetPoint::getPoint(QPointF *point) {
127
    if (completed) {
128
        point->setX(targetPoint.x);
129
        point->setY(targetPoint.y);
130
    } else {
131
        point->setX(0.0);
132
        point->setY(0.0);
133
    }
134
}
135
136
// EOF