All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ViewZoom.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 // TerraLib
21 #include "ViewZoom.h"
22 #include "../../../../geometry/Envelope.h"
23 #include "../View.h"
24 #include "../Scene.h"
25 #include "../../../core/pattern/singleton/Context.h"
26 
27 // Qt
28 #include <QtGui/QMouseEvent>
29 #include <QtGui/QPainter>
30 #include <QtGui/QPixmap>
31 
32 te::layout::ViewZoom::ViewZoom(View* view, const double& zoomFactor, const ViewZoomType& type, QObject* parent)
33  : AbstractViewTool(view, parent),
34  m_zoomFactor(zoomFactor),
35  m_zoomType(type)
36 {
37 
38 }
39 
41 {
42 }
43 
45 {
46  m_zoomType = type;
47 }
48 
49 void te::layout::ViewZoom::applyZoom(const QPointF& point)
50 {
51  if(!m_view)
52  {
53  return;
54  }
55 
56  // Calculates the extent translated
57  Scene* scne = dynamic_cast<Scene*>(m_view->scene());
58 
59  if(!scne)
60  {
61  return;
62  }
63 
64  //Conversion to world coordinates
65  QPointF pt = m_view->mapToScene(point.toPoint());
66 
67  double currentZoomFactor = Context::getInstance().getZoomFactor();
68  double factor = m_view->previousFactor(currentZoomFactor);
69 
70  if(factor > 0)
71  {
72  //Zoom Out
73  m_view->changeZoomFactor(factor);
74  m_view->centerOn(pt);
75  }
76 
77  scne->update();
78 }
ViewZoom(View *view, const double &zoomFactor=2.0, const ViewZoomType &type=TypeIn, QObject *parent=0)
It constructs a zoom associated with the given map display.
Definition: ViewZoom.cpp:32
virtual ~ViewZoom()
Destructor.
Definition: ViewZoom.cpp:40
void setZoomType(const ViewZoomType &type)
Sets the zoom operation type.
Definition: ViewZoom.cpp:44
static Context & getInstance()
It returns a reference to the singleton instance.
Class representing the view. This view is child of QGraphicsView, part of Graphics View Framework...
Definition: View.h:89
void applyZoom(const QPointF &point=QPointF())
Performs the zoom operation on map display, considering the zoom factor, zoom type and the given poin...
Definition: ViewZoom.cpp:49
Class representing the scene. This scene is child of QGraphicsScene, part of Graphics View Framework...
Definition: Scene.h:80
ViewZoomType
Defines the zoom type.
Definition: ViewZoom.h:50
double getZoomFactor()
Returns current zoom factor. Ex.: 0.5 (50%)
Definition: Context.cpp:103