• 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
  • compass
CompassFloatItem.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 Dennis Nienhüser <earthwings@gentoo.org>
10 //
11 
12 #include "CompassFloatItem.h"
13 #include "ui_CompassConfigWidget.h"
14 
15 #include "MarbleDebug.h"
16 #include "MarbleDirs.h"
17 #include "ViewportParams.h"
18 
19 #include <QRect>
20 #include <QColor>
21 #include <QPainter>
22 #include <QPixmap>
23 #include <QPushButton>
24 #include <QSvgRenderer>
25 
26 namespace Marble
27 {
28 
29 CompassFloatItem::CompassFloatItem()
30  : AbstractFloatItem( 0 ),
31  m_svgobj( 0 ),
32  m_polarity( 0 ),
33  m_themeIndex( 0 ),
34  m_configDialog( 0 ),
35  m_uiConfigWidget( 0 )
36 {
37 }
38 
39 CompassFloatItem::CompassFloatItem( const MarbleModel *marbleModel )
40  : AbstractFloatItem( marbleModel, QPointF( -1.0, 10.0 ), QSizeF( 75.0, 75.0 ) ),
41  m_isInitialized( false ),
42  m_svgobj( 0 ),
43  m_compass(),
44  m_polarity( 0 ),
45  m_themeIndex( 0 ),
46  m_configDialog( 0 ),
47  m_uiConfigWidget( 0 )
48 {
49 }
50 
51 CompassFloatItem::~CompassFloatItem ()
52 {
53  delete m_svgobj;
54 }
55 
56 QStringList CompassFloatItem::backendTypes() const
57 {
58  return QStringList( "compass" );
59 }
60 
61 QString CompassFloatItem::name() const
62 {
63  return tr( "Compass" );
64 }
65 
66 QString CompassFloatItem::guiString() const
67 {
68  return tr( "&Compass" );
69 }
70 
71 QString CompassFloatItem::nameId() const
72 {
73  return QString( "compass" );
74 }
75 
76 QString CompassFloatItem::version() const
77 {
78  return "1.0";
79 }
80 
81 QString CompassFloatItem::description() const
82 {
83  return tr( "This is a float item that provides a compass." );
84 }
85 
86 QString CompassFloatItem::copyrightYears() const
87 {
88  return "2009, 2010";
89 }
90 
91 QList<PluginAuthor> CompassFloatItem::pluginAuthors() const
92 {
93  return QList<PluginAuthor>()
94  << PluginAuthor( QString::fromUtf8( "Dennis Nienhüser" ), "earthwings@gentoo.org" )
95  << PluginAuthor( "Torsten Rahn", "tackat@kde.org" );
96 }
97 
98 QIcon CompassFloatItem::icon() const
99 {
100  return QIcon(":/icons/compass.png");
101 }
102 
103 void CompassFloatItem::initialize()
104 {
105  readSettings();
106  m_isInitialized = true;
107 }
108 
109 bool CompassFloatItem::isInitialized() const
110 {
111  return m_isInitialized;
112 }
113 
114 QPainterPath CompassFloatItem::backgroundShape() const
115 {
116  QRectF contentRect = this->contentRect();
117  QPainterPath path;
118  int fontheight = QFontMetrics( font() ).ascent();
119  int compassLength = static_cast<int>( contentRect.height() ) - 5 - fontheight;
120 
121  path.addEllipse( QRectF( QPointF( marginLeft() + padding() + ( contentRect.width() - compassLength ) / 2,
122  marginTop() + padding() + 5 + fontheight ),
123  QSize( compassLength, compassLength ) ).toRect() );
124  return path;
125 }
126 
127 void CompassFloatItem::setProjection( const ViewportParams *viewport )
128 {
129  // figure out the polarity ...
130  if ( m_polarity != viewport->polarity() ) {
131  m_polarity = viewport->polarity();
132  update();
133  }
134 
135  AbstractFloatItem::setProjection( viewport );
136 }
137 
138 void CompassFloatItem::paintContent( QPainter *painter )
139 {
140  painter->save();
141 
142  QRectF compassRect( contentRect() );
143 
144  QString dirstr = tr( "N" );
145  if ( m_polarity == -1 )
146  dirstr = tr( "S" );
147  if ( m_polarity == 0 )
148  dirstr = "";
149 
150  int fontheight = QFontMetrics( font() ).ascent();
151  int fontwidth = QFontMetrics( font() ).boundingRect( dirstr ).width();
152 
153  QPen outlinepen( background().color() );
154  outlinepen.setWidth( 2 );
155  QBrush outlinebrush( pen().color() );
156 
157  QPainterPath outlinepath;
158  const QPointF baseline( 0.5 * (qreal)( compassRect.width() - fontwidth ),
159  (qreal)(fontheight) + 2.0 );
160 
161  outlinepath.addText( baseline, font(), dirstr );
162 
163  painter->setPen( outlinepen );
164  painter->setBrush( outlinebrush );
165  painter->drawPath( outlinepath );
166 
167  painter->setPen( Qt::NoPen );
168  painter->drawPath( outlinepath );
169 
170  int compassLength = static_cast<int>( compassRect.height() ) - 5 - fontheight;
171 
172  QSize compassSize( compassLength, compassLength );
173 
174  // Rerender compass pixmap if the size has changed
175  if ( m_compass.isNull() || m_compass.size() != compassSize ) {
176  m_compass = QPixmap( compassSize );
177  m_compass.fill( Qt::transparent );
178  QPainter mapPainter( &m_compass );
179  mapPainter.setViewport( m_compass.rect() );
180  m_svgobj->render( &mapPainter );
181  }
182  painter->drawPixmap( QPoint( static_cast<int>( compassRect.width() - compassLength ) / 2, fontheight + 5 ), m_compass );
183 
184  painter->restore();
185 }
186 
187 QDialog *CompassFloatItem::configDialog()
188 {
189  if ( !m_configDialog ) {
190  m_configDialog = new QDialog();
191  m_uiConfigWidget = new Ui::CompassConfigWidget;
192  m_uiConfigWidget->setupUi( m_configDialog );
193  readSettings();
194  connect( m_uiConfigWidget->m_buttonBox, SIGNAL(accepted()),
195  SLOT(writeSettings()) );
196  connect( m_uiConfigWidget->m_buttonBox, SIGNAL(rejected()),
197  SLOT(readSettings()) );
198  QPushButton *applyButton = m_uiConfigWidget->m_buttonBox->button( QDialogButtonBox::Apply );
199  connect( applyButton, SIGNAL(clicked()),
200  this, SLOT(writeSettings()) );
201  }
202 
203  return m_configDialog;
204 }
205 
206 QHash<QString,QVariant> CompassFloatItem::settings() const
207 {
208  QHash<QString, QVariant> result = AbstractFloatItem::settings();
209 
210  result.insert( "theme", m_themeIndex );
211 
212  return result;
213 }
214 
215 void CompassFloatItem::setSettings( const QHash<QString,QVariant> &settings )
216 {
217  AbstractFloatItem::setSettings( settings );
218 
219  m_themeIndex = settings.value( "theme", 0 ).toInt();
220 
221  readSettings();
222 }
223 
224 void CompassFloatItem::readSettings()
225 {
226  if ( m_uiConfigWidget && m_themeIndex >= 0 && m_themeIndex < m_uiConfigWidget->m_themeList->count() ) {
227  m_uiConfigWidget->m_themeList->setCurrentRow( m_themeIndex );
228  }
229 
230  QString theme = ":/compass.svg";
231  switch( m_themeIndex ) {
232  case 1:
233  theme = ":/compass-arrows.svg";
234  break;
235  case 2:
236  theme = ":/compass-atom.svg";
237  break;
238  case 3:
239  theme = ":/compass-magnet.svg";
240  break;
241  }
242 
243  delete m_svgobj;
244  m_svgobj = new QSvgRenderer( theme, this );
245  m_compass = QPixmap();
246 }
247 
248 void CompassFloatItem::writeSettings()
249 {
250  if ( m_uiConfigWidget ) {
251  m_themeIndex = m_uiConfigWidget->m_themeList->currentRow();
252  }
253  readSettings();
254  update();
255  emit settingsChanged( nameId() );
256 }
257 
258 }
259 
260 Q_EXPORT_PLUGIN2( CompassFloatItem, Marble::CompassFloatItem )
261 
262 #include "CompassFloatItem.moc"
QPainterPath::addEllipse
void addEllipse(const QRectF &boundingRectangle)
Marble::AbstractFloatItem::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: AbstractFloatItem.cpp:72
QPixmap::size
QSize size() const
QPainter::setViewport
void setViewport(const QRect &rectangle)
QHash::insert
iterator insert(const Key &key, const T &value)
QFontMetrics::ascent
int ascent() const
Marble::CompassFloatItem::setProjection
void setProjection(const ViewportParams *viewport)
Definition: CompassFloatItem.cpp:127
Marble::CompassFloatItem::version
QString version() const
Definition: CompassFloatItem.cpp:76
QPixmap::fill
void fill(const QColor &color)
QSvgRenderer::render
void render(QPainter *painter)
Marble::CompassFloatItem::nameId
QString nameId() const
Returns the unique name of the plugin.
Definition: CompassFloatItem.cpp:71
Marble::CompassFloatItem::configDialog
QDialog * configDialog()
Returns a pointer to the configuration dialog of the plugin.
Definition: CompassFloatItem.cpp:187
Marble::FrameGraphicsItem::marginLeft
qreal marginLeft() const
Returns the left margin of the item.
Definition: FrameGraphicsItem.cpp:85
QSvgRenderer
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::AbstractFloatItem::pen
QPen pen() const
current pen for rendering
Definition: AbstractFloatItem.cpp:98
QPainter::save
void save()
Marble::AbstractFloatItem::setSettings
virtual void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: AbstractFloatItem.cpp:79
Marble::CompassFloatItem::backgroundShape
QPainterPath backgroundShape() const
Returns the shape of the background.
Definition: CompassFloatItem.cpp:114
Marble::CompassFloatItem
The class that creates a compass.
Definition: CompassFloatItem.h:33
QBrush
Marble::CompassFloatItem::setSettings
void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: CompassFloatItem.cpp:215
QPoint
QFontMetrics
QPainterPath::addText
void addText(const QPointF &point, const QFont &font, const QString &text)
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QPointF
QFontMetrics::boundingRect
QRect boundingRect(QChar ch) const
QString::fromUtf8
QString fromUtf8(const char *str, int size)
QHash< QString, QVariant >
Marble::FrameGraphicsItem::background
QBrush background() const
Returns the background brush of the item.
Definition: FrameGraphicsItem.cpp:156
QPainter::setPen
void setPen(const QColor &color)
Marble::RenderPlugin::settingsChanged
void settingsChanged(QString nameId)
This signal is emitted if the settings of the RenderPlugin changed.
Marble::AbstractFloatItem
The abstract class for float item plugins.
Definition: AbstractFloatItem.h:45
Marble::CompassFloatItem::guiString
QString guiString() const
String that should be displayed in GUI.
Definition: CompassFloatItem.cpp:66
QPainter::drawPixmap
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
Marble::CompassFloatItem::name
QString name() const
Returns the user-visible name of the plugin.
Definition: CompassFloatItem.cpp:61
QPainter
Marble::FrameGraphicsItem::contentRect
QRectF contentRect() const
Returns the rect of the content in item coordinates.
Definition: FrameGraphicsItem.cpp:167
MarbleDirs.h
Marble::CompassFloatItem::settings
QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: CompassFloatItem.cpp:206
Marble::CompassFloatItem::copyrightYears
QString copyrightYears() const
Definition: CompassFloatItem.cpp:86
QPainter::setBrush
void setBrush(const QBrush &brush)
QString
QList
Marble::CompassFloatItem::isInitialized
bool isInitialized() const
Definition: CompassFloatItem.cpp:109
Marble::ViewportParams::polarity
int polarity() const
Definition: ViewportParams.cpp:150
Marble::FrameGraphicsItem::padding
qreal padding() const
Returns the padding of the item.
Definition: FrameGraphicsItem.cpp:121
QStringList
Marble::ViewportParams
A public class that controls what is visible in the viewport of a Marble map.
Definition: ViewportParams.h:44
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.
QPainter::restore
void restore()
Marble::CompassFloatItem::description
QString description() const
Returns a user description of the plugin.
Definition: CompassFloatItem.cpp:81
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
QPainterPath
QRect::width
int width() const
QRectF::width
qreal width() const
Marble::FrameGraphicsItem::marginTop
qreal marginTop() const
Returns the top margin of the item.
Definition: FrameGraphicsItem.cpp:61
QPainter::drawPath
void drawPath(const QPainterPath &path)
QSizeF
QPen::setWidth
void setWidth(int width)
Marble::CompassFloatItem::icon
QIcon icon() const
Returns an icon for the plugin.
Definition: CompassFloatItem.cpp:98
QRectF
Marble::CompassFloatItem::pluginAuthors
QList< PluginAuthor > pluginAuthors() const
Definition: CompassFloatItem.cpp:91
Marble::MarbleGraphicsItem::update
void update()
Marks the item and all parent items as invalid.
Definition: MarbleGraphicsItem.cpp:167
QPen
QDialog
Marble::AbstractFloatItem::font
QFont font() const
current font for rendering
Definition: AbstractFloatItem.cpp:109
QRectF::height
qreal height() const
QPushButton
Marble::CompassFloatItem::paintContent
void paintContent(QPainter *painter)
Here the items paint their content.
Definition: CompassFloatItem.cpp:138
Marble::CompassFloatItem::initialize
void initialize()
Definition: CompassFloatItem.cpp:103
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::CompassFloatItem::CompassFloatItem
CompassFloatItem()
Definition: CompassFloatItem.cpp:29
QPixmap::rect
QRect rect() const
Marble::CompassFloatItem::~CompassFloatItem
~CompassFloatItem()
Definition: CompassFloatItem.cpp:51
CompassFloatItem.h
QIcon
Marble::CompassFloatItem::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: CompassFloatItem.cpp:56
Marble::MarbleGraphicsItem::setProjection
virtual void setProjection(const ViewportParams *viewport)
Definition: MarbleGraphicsItem.cpp:272
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