# HG changeset patch # User Pantxo Diribarne # Date 1429560789 -7200 # Node ID f1f6d5eab46f5a58c42fa58c5b66b6b8a9b2420e # Parent 8eb72c4ed457bb0c15faff9bc9aa29fa50253144 Draw a zoom-like box when creating an annotation interactively * Canvas.h: new private state variable m_rectMode * Canvas.cc (Canvas::canvasMousePressEvent): in text mode, initialize m_mouseAnchor, m_mouseCurrent, m_mouseAxes m_mouseMode = newMouseMode, m_rectMode = true for drawing the box; Remove call to anno_dlg. * Canvas.cc (Canvas::canvasMouseMoveEvent): track mouse position as in zoom mode * Canvas.cc (Canvas::canvasMouseReleaseEvent): use the anchor and current mouse coordoinates to define the position, and then call annot_dlg. * annotation-dialog.ui: allow negative values for width and height diff -r 8eb72c4ed457 -r f1f6d5eab46f libgui/graphics/Canvas.cc --- a/libgui/graphics/Canvas.cc Mon Apr 20 09:26:13 2015 +0200 +++ b/libgui/graphics/Canvas.cc Mon Apr 20 22:13:09 2015 +0200 @@ -278,7 +278,7 @@ draw (m_handle); - if (m_mouseMode == ZoomInMode && m_mouseAxes.ok ()) + if ((m_mouseMode == ZoomInMode && m_mouseAxes.ok ()) || m_rectMode) drawZoomBox (m_mouseAnchor, m_mouseCurrent); } } @@ -379,7 +379,7 @@ redraw (true); } break; - + case TextMode: case ZoomInMode: case ZoomOutMode: m_mouseCurrent = event->pos (); @@ -571,32 +571,18 @@ case TextMode: { - QWidget *w = qWidget (); - - if (! w) - break; - - Matrix bb = axesObj.get_properties ().get_boundingbox (false); - Matrix position (1, 4); - - QPoint pos = event->pos (); - - position(0) = pos.x () / bb(2); - position(1) = 1.0 - (pos.y () / bb(3)); - position(2) = pos.x () / bb(2); - position(3) = 1.0 - (pos.y () / bb(3)); - - octave_value_list props = ovl("textbox", position); - - annotation_dialog anno_dlg (w, props); - - if (anno_dlg.exec () == QDialog::Accepted) + if (event->modifiers () == Qt::NoModifier) { - props = anno_dlg.get_properties (); - - octave_link::post_event (this, &Canvas::annotation_callback, - props); + switch (event->buttons ()) + { + case Qt::LeftButton: + m_mouseAnchor = m_mouseCurrent = event->pos (); + m_mouseAxes = axesObj.get_handle (); + m_mouseMode = newMouseMode; + m_rectMode = true; + } } + redraw (false); } break; @@ -751,7 +737,38 @@ "windowbuttonupfcn"); } } + else if (m_mouseMode == TextMode) + { + gh_manager::auto_lock lock; + + graphics_object figObj = + gh_manager::get_object (m_handle).get_ancestor ("figure"); + if (figObj.valid_object ()) + { + QWidget *w = qWidget (); + if (w) + { + Matrix bb = figObj.get ("position").matrix_value (); + bb(0) = m_mouseAnchor.x () / bb(2); + bb(1) = 1.0 - (m_mouseAnchor.y () / bb(3)); + bb(2) = (event->x () - m_mouseAnchor.x ()) / bb(2); + bb(3) = (m_mouseAnchor.y () - event->y ()) / bb(3); + octave_value_list props = ovl("textbox", bb); + + annotation_dialog anno_dlg (w, props); + + if (anno_dlg.exec () == QDialog::Accepted) + { + props = anno_dlg.get_properties (); + + octave_link::post_event (this, &Canvas::annotation_callback, + props); + } + } + } + } + m_rectMode = false; m_mouseAxes = graphics_handle (); m_mouseMode = NoMode; } diff -r 8eb72c4ed457 -r f1f6d5eab46f libgui/graphics/Canvas.h --- a/libgui/graphics/Canvas.h Mon Apr 20 09:26:13 2015 +0200 +++ b/libgui/graphics/Canvas.h Mon Apr 20 22:13:09 2015 +0200 @@ -84,7 +84,8 @@ m_redrawBlocked (false), m_mouseMode (NoMode), m_clickMode (false), - m_eventMask (0) + m_eventMask (0), + m_rectMode (false) { } void canvasToggleAxes (const graphics_handle& handle); @@ -113,6 +114,7 @@ QPoint m_mouseCurrent; graphics_handle m_mouseAxes; int m_eventMask; + bool m_rectMode; }; }; // namespace QtHandles diff -r 8eb72c4ed457 -r f1f6d5eab46f libgui/graphics/annotation-dialog.ui --- a/libgui/graphics/annotation-dialog.ui Mon Apr 20 09:26:13 2015 +0200 +++ b/libgui/graphics/annotation-dialog.ui Mon Apr 20 22:13:09 2015 +0200 @@ -9,8 +9,8 @@ 0 0 - 450 - 368 + 621 + 401 @@ -625,7 +625,14 @@ - + + + 0.000000000000000 + + + 0.010000000000000 + + @@ -638,7 +645,14 @@ - + + + 0.000000000000000 + + + 0.010000000000000 + + @@ -648,7 +662,14 @@ - + + + -99.989999999999995 + + + 0.010000000000000 + + @@ -658,7 +679,14 @@ - + + + -99.000000000000000 + + + 0.010000000000000 + +