24#include <QGraphicsItem>
47void DigitizeStateSelect::addHoverHighlighting()
52 QList<QGraphicsItem*>::iterator itr;
53 for (itr = items.begin (); itr != items.end (); itr++) {
55 QGraphicsItem *item = *itr;
58 item->setAcceptHoverEvents(
true);
71 addHoverHighlighting();
86 return QCursor (Qt::ArrowCursor);
93 removeHoverHighlighting();
102 const QString &pointIdentifier)
105 <<
" point=" << pointIdentifier.toLatin1 ().data ();
108 handleContextMenuEventAxis2 (cmdMediator);
110 handleContextMenuEventAxis34 (cmdMediator,
115void DigitizeStateSelect::handleContextMenuEventAxis2 (
CmdMediator *cmdMediator)
119 const bool IS_NOT_X_ONLY =
false;
123 QString pointIdentifier = scaleBarPointIdentifier (cmdMediator);
129 double scaleLength = scaleBarLength (cmdMediator);
133 context().mainWindow().modelMainWindow(),
135 int rtn = dlg->exec ();
140 if (rtn == QDialog::Accepted) {
145 QString errorMessage;
147 bool isXNonzero = (qAbs (posGraphBefore.x()) > 0);
148 QPointF posGraphAfter (isXNonzero ? scaleLength : 0,
149 isXNonzero ? 0 : scaleLength);
158 QMessageBox::warning (
nullptr,
165 CmdEditPointAxis *cmd =
new CmdEditPointAxis (
context().mainWindow(),
177void DigitizeStateSelect::handleContextMenuEventAxis34 (
CmdMediator *cmdMediator,
178 const QString &pointIdentifier)
187 double x = posGraphBefore.x();
188 double y = posGraphBefore.y();
190 DlgEditPointAxis *dlg =
new DlgEditPointAxis (
context().mainWindow(),
193 context().mainWindow().modelMainWindow(),
194 context().mainWindow().transformation(),
199 int rtn = dlg->exec ();
201 QPointF posGraphAfter = dlg->
posGraph (isXOnly);
204 if (rtn == QDialog::Accepted) {
209 QString errorMessage;
219 QMessageBox::warning (
nullptr,
226 CmdEditPointAxis *cmd =
new CmdEditPointAxis (
context().mainWindow(),
239 const QStringList &pointIdentifiers)
242 <<
"points=" << pointIdentifiers.join(
",").toLatin1 ().data ();
247 if (
context().mainWindow().transformation().transformIsDefined()) {
249 double *x =
nullptr, *y =
nullptr;
251 if (pointIdentifiers.count() == 1) {
258 QPointF posGraphBefore;
263 *x = posGraphBefore.x();
264 *y = posGraphBefore.y();
270 context().mainWindow().modelMainWindow(),
271 context().mainWindow().transformation(),
280 int rtn = dlg->exec ();
282 bool isXGiven, isYGiven;
283 double xGiven, yGiven;
284 dlg->
posGraph (isXGiven, xGiven, isYGiven, yGiven);
287 if (rtn == QDialog::Accepted) {
310 bool atLeastOneSelectedItem)
313 <<
" key=" << QKeySequence (key).toString ().toLatin1 ().data ();
317 atLeastOneSelectedItem);
334 m_movingStart = posScreen;
343 QPointF deltaScreen = posScreen - m_movingStart;
346 bool positionHasChanged = (positionHasChangedIdentifers.count () > 0);
348 if (positionHasChanged && (
349 qAbs (deltaScreen.x ()) > 0 ||
350 qAbs (deltaScreen.y ()) > 0)) {
352 QString moveText = moveTextFromDeltaScreen (deltaScreen);
359 positionHasChangedIdentifers);
368 showCoordinatesIfSinglePointIsSelected ();
372QString DigitizeStateSelect::moveTextFromDeltaScreen (
const QPointF &deltaScreen)
381 bool downOrRight = (deltaScreen.y () > -1.0 * deltaScreen.x ());
382 bool upOrRight = (deltaScreen.y () < deltaScreen.x ());
383 if (downOrRight && upOrRight) {
385 }
else if (downOrRight && !upOrRight) {
387 }
else if (!downOrRight && upOrRight) {
396void DigitizeStateSelect::removeHoverHighlighting()
401 QList<QGraphicsItem*>::iterator itr;
402 for (itr = items.begin (); itr != items.end (); itr++) {
404 QGraphicsItem *item = *itr;
407 item->setAcceptHoverEvents(
false);
412double DigitizeStateSelect::scaleBarLength (
CmdMediator *cmdMediator)
const
414 CallbackScaleBar ftor;
416 Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
423QString DigitizeStateSelect::scaleBarPointIdentifier (
CmdMediator *cmdMediator)
const
425 CallbackScaleBar ftor;
427 Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
434void DigitizeStateSelect::setHoverHighlighting(
const MainWindowModel &modelMainWindow)
440 QList<QGraphicsItem*>::iterator itr;
441 for (itr = items.begin (); itr != items.end (); itr++) {
443 QGraphicsItem *item = *itr;
450void DigitizeStateSelect::showCoordinatesIfSinglePointIsSelected ()
454 if (items.size () == 1) {
457 QGraphicsItem *item = * (items.begin ());
462 QString coordsScreen, coordsGraph, resolutionGraph;
467 context().mainWindow().modeMap());
476 return "DigitizeStateSelect";
483 addHoverHighlighting ();
@ DATA_KEY_GRAPHICS_ITEM_TYPE
DigitizeState
Set of possible states of Digitize toolbar.
@ DOCUMENT_AXES_POINTS_REQUIRED_2
@ GRAPHICS_ITEM_TYPE_GUIDELINE
@ GRAPHICS_ITEM_TYPE_POINT
log4cpp::Category * mainCat
QString QPointFToString(const QPointF &pos)
QString engaugeWindowTitle()
Text for title bars of dialogs.
QString scaleBarPointIdentifier() const
Identified axis point.
double scaleBarLength() const
Length of scale bar.
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Command for editing the graph coordinates of one or more graph points.
Command for moving all selected Points by a specified translation.
QString moveTextUp() const
Display text for up arrow.
QString moveTextDown() const
Display text for down arrow.
QString moveTextLeft() const
Display text for left arrow.
virtual void handleKeyPressArrow(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
If the key is an arrow (left, right, up, down) then move currently selected items.
DigitizeStateAbstractBase(DigitizeStateContext &context)
Single constructor.
QString moveTextRight() const
Display text for right arrow.
DigitizeStateContext & context()
Reference to the DigitizeStateContext that contains all the DigitizeStateAbstractBase subclasses,...
void setCursor(CmdMediator *cmdMediator)
Update the cursor according to the current state.
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
void setDragMode(QGraphicsView::DragMode dragMode)
Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
MainWindow & mainWindow()
Reference to the MainWindow, without const.
virtual void begin(CmdMediator *cmdMediator, DigitizeState previousState)
Method that is called at the exact moment a state is entered.
virtual QCursor cursor(CmdMediator *cmdMediator) const
Returns the state-specific cursor shape.
virtual bool canPaste(const Transformation &transformation, const QSize &viewSize) const
Return true if there is good data in the clipboard for pasting, and that is compatible with the curre...
virtual void updateAfterPointAddition()
Update graphics attributes after possible new points. This is useful for highlight opacity.
virtual ~DigitizeStateSelect()
virtual void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
virtual void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
virtual void end()
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
virtual QString activeCurve() const
Name of the active Curve. This can include AXIS_CURVE_NAME.
virtual void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
Handle a right click, on a graph point, that was intercepted earlier.
virtual bool guidelinesAreSelectable() const
Enable/disable guidelines according to state.
virtual void handleMouseRelease(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse release that was intercepted earlier.
virtual void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
Handle a key press that was intercepted earlier.
virtual void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
Handle a right click, on an axis point, that was intercepted earlier.
virtual void handleMousePress(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse press that was intercepted earlier.
virtual void handleMouseMove(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse move. This is part of an experiment to see if augmenting the cursor in Point Match mod...
virtual void handleCurveChange(CmdMediator *cmdMediator)
Handle the selection of a new curve. At a minimum, DigitizeStateSegment will generate a new set of Se...
DigitizeStateSelect(DigitizeStateContext &context)
Single constructor.
virtual QString state() const
State name for debugging.
QPointF posGraph(bool &isXOnly) const
Return the graph coordinates position specified by the user. Only applies if dialog was accepted.
Dialog box for editing the information of one or more points.
void posGraph(bool &isX, double &x, bool &isY, double &y) const
Return one or both coordinates. Only applies if dialog was accepted.
Dialog box for editing the information of the map scale.
double scaleLength() const
Return the scale bar length specified by the user. Only applies if dialog was accepted.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Model for DlgSettingsSegments and CmdSettingsSegments.
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
QStringList positionHasChangedPointIdentifiers() const
Return a list of identifiers for the points that have moved since the last call to resetPositionHasCh...
Model for DlgSettingsMainWindow.
double highlightOpacity() const
Get method for highlight opacity.
void showTemporaryMessage(const QString &temporaryMessage)
Show temporary message in status bar.
CmdMediator * cmdMediator()
Accessor for commands to process the Document.
void updateViewsOfSettings(const QString &activeCurve)
Update curve-specific view of settings. Private version gets active curve name from DigitizeStateCont...
void handleGuidelinesActiveChange(bool active)
Handle Guidelines active status toggle.
QString selectedGraphCurve() const
Curve name that is currently selected in m_cmbCurve.
GraphicsScene & scene()
Scene container for the QImage and QGraphicsItems.
void updateAfterMouseRelease()
Call MainWindow::updateControls (which is private) after the very specific case - a mouse press/relea...
Transformation transformation() const
Return read-only copy of transformation.
#define LOG4CPP_INFO_S(logger)
#define LOG4CPP_DEBUG_S(logger)