All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ToolbarOutside.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2001-2014 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 /*!
21  \file ToolbarOutside.cpp
22 
23  \brief
24 
25  \ingroup layout
26 */
27 
28 // TerraLib
29 #include "ToolbarOutside.h"
30 #include "Context.h"
31 #include "AbstractScene.h"
32 #include "Scene.h"
33 #include "OutsideModelObservable.h"
34 #include "ItemObserver.h"
35 #include "OutsideObserver.h"
36 #include "OutsideController.h"
37 #include "../../../../geometry/Envelope.h"
38 #include "EnumMode.h"
39 #include "LayoutConfig.h" /*Layout Images*/
40 
41 //STL
42 #include <string>
43 
44 // Qt
45 #include <QToolBar>
46 #include <QToolButton>
47 #include <QComboBox>
48 #include <QGroupBox>
49 #include <QVBoxLayout>
50 #include <QLabel>
51 #include <QTextEdit>
52 #include <QMenuBar>
53 #include <QAction>
54 #include <QPushButton>
55 
57  QDockWidget("", 0, 0),
58  OutsideObserver(controller, o),
59  m_optionMapDefault("map_default"),
60  m_optionMapGrid("map_grid"),
61  m_optionLegendDefault("legend_default"),
62  m_optionRectangle("geometry_rectangle"),
63  m_optionViewPan("view_pan"),
64  m_optionViewZoomIn("view_zoom_in"),
65  m_optionViewZoomOut("view_zoom_out"),
66  m_optionScale("scale_object"),
67  m_optionMapPan("map_pan"),
68  m_optionMapZoomIn("map_zoom_in"),
69  m_optionMapZoomOut("map_zoom_out"),
70  m_optionGroup("items_group"),
71  m_optionUngroup("items_ungroup"),
72  m_optionLineIntersectionMouse("items_intersection_mouse"),
73  m_toolbar(0),
74  m_btnMap(0)
75 {
77 
78  setVisible(false);
79  setWindowTitle("Layout - Toolbar");
80  setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
81  setMinimumSize(200, 10);
82 
83  createToolbar();
84  setWidget(m_toolbar);
85 }
86 
88 {
89 
90 }
91 
93 {
94  setVisible(context.getShow());
95  if(context.getShow() == true)
96  show();
97  else
98  hide();
99 }
100 
101 void te::layout::ToolbarOutside::setPosition( const double& x, const double& y )
102 {
103  move(x,y);
104  refresh();
105 }
106 
108 {
109  QPointF posF = pos();
110  qreal valuex = posF.x();
111  qreal valuey = posF.y();
112 
113  te::gm::Coord2D coordinate;
114  coordinate.x = valuex;
115  coordinate.y = valuey;
116 
117  return coordinate;
118 }
119 
121 {
122  m_toolbar = new QToolBar;
123 
124  createArrowCursorButton();
125  m_toolbar->addSeparator();
126 
127  createLineIntersectionToolButton();
128  m_toolbar->addSeparator();
129 
130  createViewAreaToolButton();
131  m_toolbar->addSeparator();
132 
133  createMapToolsToolButton();
134  m_toolbar->addSeparator();
135 
136  createMapToolButton();
137  m_toolbar->addSeparator();
138 
139  createGeometryToolButton();
140  m_toolbar->addSeparator();
141 
142  createItemTools();
143  m_toolbar->addSeparator();
144 }
145 
147 {
148  QMenu* menu = new QMenu();
149  connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onMapTriggered(QAction*)));
150 
151  QAction* actionDefaultMenu = createAction("Default Map Object", m_optionMapDefault, "layout-default-map");
152  menu->addAction(actionDefaultMenu);
153 
154  QAction* actionMapGrid = createAction("Map Grid", m_optionMapGrid, "layout-map-grid");
155  menu->addAction(actionMapGrid);
156 
157  QAction* actionLegend = createAction("Default Legend", m_optionLegendDefault, "layout-default-legend");
158  menu->addAction(actionLegend);
159 
160  QAction* actionScale = createAction("Scale Object", m_optionScale, "layout-scale");
161  menu->addAction(actionScale);
162 
163  QToolButton *btnMap = createToolButton("Map", "Map Objects", "layout-default-map");
164  btnMap->setMenu(menu);
165  btnMap->setPopupMode(QToolButton::InstantPopup);
166 
167  m_toolbar->addWidget(btnMap);
168 }
169 
171 {
172  QMenu* menu = new QMenu();
173  connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onMapToolsTriggered(QAction*)));
174 
175  QAction* actionPan = createAction("Pan Tool", m_optionMapPan, "layout-map-pan");
176  menu->addAction(actionPan);
177 
178  QAction* actionZoomIn = createAction("Zoom In", m_optionMapZoomIn, "layout-map-zoom-in");
179  menu->addAction(actionZoomIn);
180 
181  QAction* actionZoomOut = createAction("Zoom Out", m_optionMapZoomOut, "layout-map-zoom-out");
182  menu->addAction(actionZoomOut);
183 
184  QToolButton *btnMapTools = createToolButton("Map Tools", "Map Tools", "layout-map-pan");
185  btnMapTools->setMenu(menu);
186  btnMapTools->setPopupMode(QToolButton::InstantPopup);
187 
188  m_toolbar->addWidget(btnMapTools);
189 }
190 
192 {
193  QMenu* menu = new QMenu();
194  connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onGeometryTriggered(QAction*)));
195 
196  QAction* actionRectagle = createAction("Rectangle Object", m_optionRectangle, "layout-square");
197  menu->addAction(actionRectagle);
198 
199  QToolButton *btnGeometry = createToolButton("Geometry Tools", "Geometries Objects", "layout-square");
200  btnGeometry->setMenu(menu);
201  btnGeometry->setPopupMode(QToolButton::InstantPopup);
202 
203  m_toolbar->addWidget(btnGeometry);
204 }
205 
207 {
208  QMenu* menu = new QMenu();
209  connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onViewAreaTriggered(QAction*)));
210 
211  QAction* actionPan = createAction("Pan Tool", m_optionViewPan, "layout-paper-pan");
212  menu->addAction(actionPan);
213 
214  QAction* actionZoomIn = createAction("Zoom In", m_optionViewZoomIn, "layout-paper-zoom-in");
215  menu->addAction(actionZoomIn);
216 
217  QAction* actionZoomOut = createAction("Zoom Out", m_optionRectangle, "layout-paper-zoom-out");
218  menu->addAction(actionZoomOut);
219 
220  QToolButton *btnViewArea = createToolButton("Paper Tools", "Paper Tools", "layout-paper-pan");
221  btnViewArea->setMenu(menu);
222  btnViewArea->setPopupMode(QToolButton::InstantPopup);
223 
224  m_toolbar->addWidget(btnViewArea);
225 }
226 
228 {
229  QToolButton *btnArrowCursor = createToolButton("Arrow Cursor", "Arrow Cursor", "layout-default-cursor");
230  btnArrowCursor->setCheckable(false);
231  connect(btnArrowCursor, SIGNAL(clicked(bool)), this, SLOT(onArrowCursorClicked(bool)));
232 
233  m_toolbar->addWidget(btnArrowCursor);
234 }
235 
237 {
238  QMenu* menu = new QMenu();
239  connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onItemToolsTriggered(QAction*)));
240 
241  QAction* actionGroup = createAction("Group", m_optionGroup, "layout-group");
242  menu->addAction(actionGroup);
243 
244  QAction* actionUngroup = createAction("Ungroup", m_optionUngroup, "layout-ungroup");
245  menu->addAction(actionUngroup);
246 
247  QToolButton *btnTools = createToolButton("Item Tools", "Item Tools", "layout-group");
248  btnTools->setMenu(menu);
249  btnTools->setPopupMode(QToolButton::InstantPopup);
250 
251  m_toolbar->addWidget(btnTools);
252 }
253 
255 {
256  QToolButton *btnLineMouse = createToolButton("Draw Line Intersection Mouse", "Draw Line Intersection Mouse", "layout-draw-line-mouse-intersection");
257  connect(btnLineMouse, SIGNAL(toggled(bool)), this, SLOT(onLineIntersectionMouse(bool)));
258 
259  m_toolbar->addWidget(btnLineMouse);
260 }
261 
263 {
264  if(action->objectName().compare(m_optionMapDefault.c_str()) == 0)
265  {
266  changeAction(TypeCreateMap);
267  }
268  if(action->objectName().compare(m_optionMapGrid.c_str()) == 0)
269  {
270  changeAction(TypeCreateMapGrid);
271  }
272  if(action->objectName().compare(m_optionLegendDefault.c_str()) == 0)
273  {
274  changeAction(TypeCreateLegend);
275  }
276  if(action->objectName().compare(m_optionScale.c_str()) == 0)
277  {
278  changeAction(TypeCreateScale);
279  }
280 }
281 
283 {
284  if(action->objectName().compare(m_optionMapPan.c_str()) == 0)
285  {
286  changeAction(TypeMapPan);
287  }
288  if(action->objectName().compare(m_optionMapZoomIn.c_str()) == 0)
289  {
290  changeAction(TypeMapZoomIn);
291  }
292  if(action->objectName().compare(m_optionMapZoomOut.c_str()) == 0)
293  {
294  changeAction(TypeMapZoomOut);
295  }
296 }
297 
299 {
300  if(action->objectName().compare(m_optionRectangle.c_str()) == 0)
301  {
302  changeAction(TypeCreateRectangle);
303  }
304 }
305 
307 {
308  if(action->objectName().compare(m_optionViewPan.c_str()) == 0)
309  {
310  changeAction(TypePan);
311  }
312  if(action->objectName().compare(m_optionViewZoomIn.c_str()) == 0)
313  {
314  changeAction(TypeZoomIn);
315  }
316  if(action->objectName().compare(m_optionViewZoomOut.c_str()) == 0)
317  {
318  changeAction(TypeZoomOut);
319  }
320 }
321 
323 {
324  changeAction(TypeArrowCursor);
325 }
326 
328 {
329  if(action->objectName().compare(m_optionGroup.c_str()) == 0)
330  {
331  changeAction(TypeGroup);
332  }
333  if(action->objectName().compare(m_optionUngroup.c_str()) == 0)
334  {
335  changeAction(TypeUngroup);
336  }
337 }
338 
340 {
341  bool result = false;
343 
344  if(checked)
345  {
346  if(TypeActiveLinesIntersectionMouse != mouseMode)
347  {
349  }
350  }
351  else
352  {
353  if(TypeOffLinesIntersectionMouse != mouseMode)
354  {
356  }
357  }
358 
359  emit changeContext(result);
360 }
361 
363 {
364  bool result = true;
365  LayoutMode layoutMode = Context::getInstance()->getMode();
366 
367  if(mode != layoutMode)
368  {
369  Context::getInstance()->setMode(mode);
370  }
371  else
372  {
373  result = false;
374  }
375 
376  emit changeContext(result);
377 }
378 
379 QToolButton* te::layout::ToolbarOutside::createToolButton( std::string text, std::string tooltip, std::string icon )
380 {
381  QToolButton *btn = new QToolButton;
382  btn->setText(text.c_str());
383  btn->setGeometry(0,0,10,10);
384  btn->setCheckable(true);
385  btn->setToolTip(tooltip.c_str());
386 
387  std::string icon_path = LAYOUT_IMAGES_PNG"/" + icon;
388  btn->setIcon(QIcon::fromTheme(icon_path.c_str()));
389 
390  return btn;
391 }
392 
393 QPushButton* te::layout::ToolbarOutside::createPushButton( std::string text, std::string tooltip, std::string icon )
394 {
395  QPushButton *btn = new QPushButton;
396  btn->setText(text.c_str());
397  btn->setGeometry(0,0,10,10);
398  btn->setCheckable(true);
399  btn->setToolTip(tooltip.c_str());
400 
401  std::string icon_path = LAYOUT_IMAGES_PNG"/" + icon;
402  btn->setIcon(QIcon::fromTheme(icon_path.c_str()));
403 
404  return btn;
405 }
406 
407 QAction* te::layout::ToolbarOutside::createAction( std::string text, std::string objName, std::string icon, std::string tooltip )
408 {
409  QAction *actionMenu = new QAction(text.c_str(), this);
410  actionMenu->setObjectName(objName.c_str());
411 
412  std::string icon_path = LAYOUT_IMAGES_PNG"/" + icon;
413  actionMenu->setIcon(QIcon::fromTheme(icon_path.c_str()));
414  actionMenu->setToolTip(tooltip.c_str());
415 
416  return actionMenu;
417 }
void setLineIntersectionMouseMode(LayoutMode mode)
Definition: Context.cpp:196
virtual void createViewAreaToolButton()
virtual void onItemToolsTriggered(QAction *action)
virtual te::gm::Coord2D getPosition()
double y
y-coordinate.
Definition: Coord2D.h:87
virtual QToolButton * createToolButton(std::string text, std::string tooltip, std::string icon)
virtual void createMapToolsToolButton()
double x
x-coordinate.
Definition: Coord2D.h:86
virtual QPushButton * createPushButton(std::string text, std::string tooltip, std::string icon)
virtual te::gm::Envelope getBox()=0
virtual void createArrowCursorButton()
void setMode(LayoutMode mode)
Definition: Context.cpp:66
An utility struct for representing 2D coordinates.
Definition: Coord2D.h:40
LayoutMode
Enum LayoutMode. This is the enumeration of the components types.
Definition: EnumMode.h:38
virtual void onViewAreaTriggered(QAction *action)
virtual void onMapToolsTriggered(QAction *action)
virtual void onArrowCursorClicked(bool checked)
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
virtual void createMapToolButton()
virtual void changeAction(LayoutMode mode)
virtual void updateObserver(ContextItem context)
virtual void onLineIntersectionMouse(bool checked)
virtual void setPosition(const double &x, const double &y)
virtual void createLineIntersectionToolButton()
virtual void onGeometryTriggered(QAction *action)
virtual QAction * createAction(std::string text, std::string objName, std::string icon, std::string tooltip="")
ToolbarOutside(OutsideController *controller, Observable *o)
virtual void createGeometryToolButton()
static Context * getInstance()
This function is called to create an instance of the class.
Definition: Context.cpp:46
LayoutMode getLineIntersectionMouseMode()
Definition: Context.cpp:191
LayoutMode getMode()
Definition: Context.cpp:56
virtual void onMapTriggered(QAction *action)