• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • plugins
  • render
  • crosshairs
CrosshairsPlugin.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2008 Torsten Rahn <tackat@kde.org>
9 // Copyright 2010 Cezar Mocan <mocancezar@gmail.com>
10 //
11 
12 #include "CrosshairsPlugin.h"
13 #include "ui_CrosshairsConfigWidget.h"
14 
15 #include "GeoPainter.h"
16 #include "MarbleDebug.h"
17 #include "MarbleDirs.h"
18 #include "ViewportParams.h"
19 
20 #include <QRect>
21 #include <QColor>
22 #include <QPixmap>
23 #include <QPushButton>
24 #include <QSvgRenderer>
25 
26 
27 namespace Marble
28 {
29 
30 CrosshairsPlugin::CrosshairsPlugin()
31  : RenderPlugin( 0 ),
32  m_svgobj( 0 ),
33  m_themeIndex( 0 ),
34  m_configDialog( 0 ),
35  m_uiConfigWidget( 0 )
36 {
37 }
38 
39 CrosshairsPlugin::CrosshairsPlugin( const MarbleModel *marbleModel )
40  : RenderPlugin( marbleModel ),
41  m_isInitialized( false ),
42  m_svgobj( 0 ),
43  m_themeIndex( 0 ),
44  m_configDialog( 0 ),
45  m_uiConfigWidget( 0 )
46 {
47 }
48 
49 CrosshairsPlugin::~CrosshairsPlugin ()
50 {
51  delete m_svgobj;
52 }
53 
54 
55 QStringList CrosshairsPlugin::backendTypes() const
56 {
57  return QStringList( "crosshairs" );
58 }
59 
60 QString CrosshairsPlugin::renderPolicy() const
61 {
62  return QString( "ALWAYS" );
63 }
64 
65 QStringList CrosshairsPlugin::renderPosition() const
66 {
67  return QStringList( "FLOAT_ITEM" ); // although this is not a float item we choose the position of one
68 }
69 
70 RenderPlugin::RenderType CrosshairsPlugin::renderType() const
71 {
72  return RenderPlugin::TopLevelRenderType;
73 }
74 
75 QString CrosshairsPlugin::name() const
76 {
77  return tr( "Crosshairs" );
78 }
79 
80 QString CrosshairsPlugin::guiString() const
81 {
82  return tr( "Cross&hairs" );
83 }
84 
85 QString CrosshairsPlugin::nameId() const
86 {
87  return QString( "crosshairs" );
88 }
89 
90 QString CrosshairsPlugin::version() const
91 {
92  return "1.0";
93 }
94 
95 QString CrosshairsPlugin::description() const
96 {
97  return tr( "A plugin that shows crosshairs." );
98 }
99 
100 QString CrosshairsPlugin::copyrightYears() const
101 {
102  return "2009, 2010";
103 }
104 
105 QList<PluginAuthor> CrosshairsPlugin::pluginAuthors() const
106 {
107  return QList<PluginAuthor>()
108  << PluginAuthor( "Cezar Mocan", "cezarmocan@gmail.com" )
109  << PluginAuthor( "Torsten Rahn", "tackat@kde.org" );
110 }
111 
112 QIcon CrosshairsPlugin::icon () const
113 {
114  return QIcon( ":/icons/crosshairs.png" );
115 }
116 
117 void CrosshairsPlugin::initialize ()
118 {
119  readSettings();
120  m_isInitialized = true;
121 }
122 
123 bool CrosshairsPlugin::isInitialized () const
124 {
125  return m_isInitialized;
126 }
127 
128 QDialog *CrosshairsPlugin::configDialog()
129 {
130  if ( !m_configDialog ) {
131  m_configDialog = new QDialog();
132  m_uiConfigWidget = new Ui::CrosshairsConfigWidget;
133  m_uiConfigWidget->setupUi( m_configDialog );
134  readSettings();
135  connect( m_uiConfigWidget->m_buttonBox, SIGNAL(accepted()),
136  SLOT(writeSettings()) );
137  connect( m_uiConfigWidget->m_buttonBox, SIGNAL(rejected()),
138  SLOT(readSettings()) );
139  QPushButton *applyButton = m_uiConfigWidget->m_buttonBox->button( QDialogButtonBox::Apply );
140  connect( applyButton, SIGNAL(clicked()),
141  this, SLOT(writeSettings()) );
142  }
143 
144  return m_configDialog;
145 }
146 
147 QHash<QString,QVariant> CrosshairsPlugin::settings() const
148 {
149  QHash<QString, QVariant> result = RenderPlugin::settings();
150 
151  result.insert( "theme", m_themeIndex );
152 
153  return result;
154 }
155 
156 void CrosshairsPlugin::setSettings( const QHash<QString,QVariant> &settings )
157 {
158  RenderPlugin::setSettings( settings );
159 
160  m_themeIndex = settings.value( "theme", 0 ).toInt();
161 
162  readSettings();
163 }
164 
165 
166 void CrosshairsPlugin::readSettings()
167 {
168  if ( m_uiConfigWidget && m_themeIndex >= 0 && m_themeIndex < m_uiConfigWidget->m_themeList->count() ) {
169  m_uiConfigWidget->m_themeList->setCurrentRow( m_themeIndex );
170  }
171 
172  QString theme = ":/crosshairs-pointed.svg";
173  switch( m_themeIndex ) {
174  case 1:
175  theme = ":/crosshairs-gun1.svg";
176  break;
177  case 2:
178  theme = ":/crosshairs-gun2.svg";
179  break;
180  case 3:
181  theme = ":/crosshairs-circled.svg";
182  break;
183  case 4:
184  theme = ":/crosshairs-german.svg";
185  break;
186  }
187 
188  delete m_svgobj;
189  CrosshairsPlugin * me = const_cast<CrosshairsPlugin*>( this );
190  m_svgobj = new QSvgRenderer( theme, me );
191  m_crosshairs = QPixmap();
192 }
193 
194 void CrosshairsPlugin::writeSettings()
195 {
196  if ( m_uiConfigWidget ) {
197  m_themeIndex = m_uiConfigWidget->m_themeList->currentRow();
198  }
199  readSettings();
200  emit settingsChanged( nameId() );
201 }
202 
203 bool CrosshairsPlugin::render( GeoPainter *painter, ViewportParams *viewport,
204  const QString& renderPos,
205  GeoSceneLayer * layer )
206 {
207  Q_UNUSED( renderPos )
208  Q_UNUSED( layer )
209 
210  const int width = 21;
211  const int height = 21;
212 
213  if ( m_crosshairs.isNull() ) {
214  painter->setRenderHint( QPainter::Antialiasing, true );
215  m_crosshairs = QPixmap( QSize( width, height ) );
216  m_crosshairs.fill( Qt::transparent );
217  QPainter mapPainter( &m_crosshairs );
218  m_svgobj->render( &mapPainter );
219  }
220 
221  GeoDataCoordinates const focusPoint = viewport->focusPoint();
222  GeoDataCoordinates const centerPoint = GeoDataCoordinates( viewport->centerLongitude(), viewport->centerLatitude() );
223  if ( focusPoint == centerPoint ) {
224  // Focus point is in the middle of the screen. Special casing this avoids jittering.
225  int centerX = viewport->size().width() / 2;
226  int centerY = viewport->size().height() / 2;
227  painter->drawPixmap( QPoint ( centerX - width / 2, centerY - height / 2 ), m_crosshairs );
228  } else {
229  qreal centerX = 0.0;
230  qreal centerY = 0.0;
231  viewport->screenCoordinates( focusPoint, centerX, centerY );
232  painter->drawPixmap( QPoint ( centerX - width / 2, centerY - height / 2 ), m_crosshairs );
233  }
234 
235  return true;
236 }
237 
238 }
239 
240 Q_EXPORT_PLUGIN2( CrosshairsPlugin, Marble::CrosshairsPlugin )
241 
242 #include "CrosshairsPlugin.moc"
Marble::RenderPlugin::TopLevelRenderType
Definition: RenderPlugin.h:61
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
QHash::insert
iterator insert(const Key &key, const T &value)
QSize::width
int width() const
Marble::ViewportParams::size
QSize size() const
Definition: ViewportParams.cpp:260
QPainter::setRenderHint
void setRenderHint(RenderHint hint, bool on)
Marble::CrosshairsPlugin::render
bool render(GeoPainter *painter, ViewportParams *viewport, const QString &renderPos, GeoSceneLayer *layer=0)
Renders the content provided by the layer on the viewport.
Definition: CrosshairsPlugin.cpp:203
Marble::CrosshairsPlugin
The class that specifies the Marble layer interface of a plugin.
Definition: CrosshairsPlugin.h:39
QPixmap::fill
void fill(const QColor &color)
QSvgRenderer::render
void render(QPainter *painter)
Marble::GeoPainter
A painter that allows to draw geometric primitives on the map.
Definition: GeoPainter.h:98
QSvgRenderer
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::CrosshairsPlugin::description
QString description() const
Returns a user description of the plugin.
Definition: CrosshairsPlugin.cpp:95
QPoint
Marble::CrosshairsPlugin::renderPolicy
QString renderPolicy() const
Return how the plugin settings should be used.
Definition: CrosshairsPlugin.cpp:60
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::CrosshairsPlugin::renderPosition
QStringList renderPosition() const
Preferred level in the layer stack for the rendering.
Definition: CrosshairsPlugin.cpp:65
Marble::GeoSceneLayer
Layer of a GeoScene document.
Definition: GeoSceneLayer.h:43
Marble::CrosshairsPlugin::~CrosshairsPlugin
~CrosshairsPlugin()
Definition: CrosshairsPlugin.cpp:49
Marble::CrosshairsPlugin::backendTypes
QStringList backendTypes() const
Returns the name(s) of the backend that the plugin can render This method should return the name of t...
Definition: CrosshairsPlugin.cpp:55
QHash< QString, QVariant >
Marble::ViewportParams::focusPoint
GeoDataCoordinates focusPoint() const
Definition: ViewportParams.cpp:413
Marble::RenderPlugin::settingsChanged
void settingsChanged(QString nameId)
This signal is emitted if the settings of the RenderPlugin changed.
QPainter
MarbleDirs.h
CrosshairsPlugin.h
Marble::CrosshairsPlugin::pluginAuthors
QList< PluginAuthor > pluginAuthors() const
Definition: CrosshairsPlugin.cpp:105
Marble::ViewportParams::screenCoordinates
bool screenCoordinates(const qreal lon, const qreal lat, qreal &x, qreal &y) const
Get the screen coordinates corresponding to geographical coordinates in the map.
Definition: ViewportParams.cpp:357
QString
QList
GeoPainter.h
Marble::CrosshairsPlugin::isInitialized
bool isInitialized() const
Definition: CrosshairsPlugin.cpp:123
QStringList
Marble::ViewportParams
A public class that controls what is visible in the viewport of a Marble map.
Definition: ViewportParams.h:44
Marble::CrosshairsPlugin::renderType
virtual RenderType renderType() const
Render type of the plugin.
Definition: CrosshairsPlugin.cpp:70
QPixmap
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
QHash::value
const T value(const Key &key) const
QPixmap::isNull
bool isNull() const
QSize
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::ViewportParams::centerLatitude
qreal centerLatitude() const
Definition: ViewportParams.cpp:294
Marble::CrosshairsPlugin::setSettings
void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: CrosshairsPlugin.cpp:156
Marble::CrosshairsPlugin::guiString
QString guiString() const
String that should be displayed in GUI.
Definition: CrosshairsPlugin.cpp:80
Marble::CrosshairsPlugin::initialize
void initialize()
Definition: CrosshairsPlugin.cpp:117
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
Marble::CrosshairsPlugin::icon
QIcon icon() const
Returns an icon for the plugin.
Definition: CrosshairsPlugin.cpp:112
Marble::CrosshairsPlugin::settings
QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: CrosshairsPlugin.cpp:147
Marble::CrosshairsPlugin::configDialog
QDialog * configDialog()
Returns a pointer to the configuration dialog of the plugin.
Definition: CrosshairsPlugin.cpp:128
Marble::ViewportParams::centerLongitude
qreal centerLongitude() const
Definition: ViewportParams.cpp:289
QSize::height
int height() const
Marble::CrosshairsPlugin::nameId
QString nameId() const
Returns the unique name of the plugin.
Definition: CrosshairsPlugin.cpp:85
QDialog
QPushButton
Marble::CrosshairsPlugin::copyrightYears
QString copyrightYears() const
Definition: CrosshairsPlugin.cpp:100
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::RenderPlugin::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: RenderPlugin.cpp:185
Marble::RenderPlugin::RenderType
RenderType
A Type of plugin.
Definition: RenderPlugin.h:59
Marble::CrosshairsPlugin::version
QString version() const
Definition: CrosshairsPlugin.cpp:90
Marble::GeoPainter::drawPixmap
void drawPixmap(const GeoDataCoordinates &centerPosition, const QPixmap &pixmap)
Draws a pixmap at the given position. The pixmap is placed with its center located at the given cente...
Definition: GeoPainter.cpp:452
Marble::RenderPlugin
The abstract class that creates a renderable item.
Definition: RenderPlugin.h:43
Marble::RenderPlugin::setSettings
virtual void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: RenderPlugin.cpp:195
Marble::CrosshairsPlugin::name
QString name() const
Returns the user-visible name of the plugin.
Definition: CrosshairsPlugin.cpp:75
Marble::CrosshairsPlugin::CrosshairsPlugin
CrosshairsPlugin()
Definition: CrosshairsPlugin.cpp:30
QIcon
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:38 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal