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

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • lib
  • marble
AbstractFloatItem.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 <rahn@kde.org>
9 //
10 
11 // Self
12 #include "AbstractFloatItem.h"
13 
14 // Qt
15 #include <QMenu>
16 #include <QAction>
17 #include <QDialog>
18 
19 // Marble
20 #include "DialogConfigurationInterface.h"
21 #include "GeoPainter.h"
22 #include "MarbleDebug.h"
23 
24 namespace Marble
25 {
26 
27 class AbstractFloatItemPrivate
28 {
29  public:
30  AbstractFloatItemPrivate() : m_contextMenu( 0 )
31  {
32  }
33 
34  ~AbstractFloatItemPrivate()
35  {
36  delete m_contextMenu;
37  }
38 
39 
40  static QPen s_pen;
41  static QFont s_font;
42 
43  QMenu* m_contextMenu;
44 };
45 
46 QPen AbstractFloatItemPrivate::s_pen = QPen( Qt::black );
47 #ifdef Q_OS_MACX
48  QFont AbstractFloatItemPrivate::s_font = QFont( "Sans Serif", 10 );
49 #else
50  QFont AbstractFloatItemPrivate::s_font = QFont( "Sans Serif", 8 );
51 #endif
52 
53 AbstractFloatItem::AbstractFloatItem( const MarbleModel *marbleModel, const QPointF &point, const QSizeF &size )
54  : RenderPlugin( marbleModel ),
55  FrameGraphicsItem(),
56  d( new AbstractFloatItemPrivate() )
57 {
58  setCacheMode( ItemCoordinateCache );
59  setFrame( RectFrame );
60  setPadding( 4.0 );
61  setContentSize( size );
62  setPosition( point );
63 }
64 
65 AbstractFloatItem::~AbstractFloatItem()
66 {
67  delete d;
68 }
69 
70 QHash<QString,QVariant> AbstractFloatItem::settings() const
71 {
72  QHash<QString,QVariant> updated = RenderPlugin::settings();
73  updated["position"] = position();
74  return updated;
75 }
76 
77 void AbstractFloatItem::setSettings(const QHash<QString, QVariant> &settings)
78 {
79  if ( settings.value( "position" ).type() == QVariant::String ) {
80  // work around KConfig turning QPointFs into QStrings
81  const QStringList coordinates = settings.value( "position" ).toString().split( QLatin1Char(',') );
82  setPosition( QPointF( coordinates.at( 0 ).toFloat(), coordinates.at( 1 ).toFloat() ) );
83  }
84  else {
85  setPosition( settings.value( "position", position() ).toPointF() );
86  }
87 
88  RenderPlugin::setSettings(settings);
89 }
90 
91 RenderPlugin::RenderType AbstractFloatItem::renderType() const
92 {
93  return RenderPlugin::PanelRenderType;
94 }
95 
96 QPen AbstractFloatItem::pen() const
97 {
98  return d->s_pen;
99 }
100 
101 void AbstractFloatItem::setPen( const QPen &pen )
102 {
103  d->s_pen = pen;
104  update();
105 }
106 
107 QFont AbstractFloatItem::font() const
108 {
109  return d->s_font;
110 }
111 
112 void AbstractFloatItem::setFont( const QFont &font )
113 {
114  d->s_font = font;
115  update();
116 }
117 
118 QString AbstractFloatItem::renderPolicy() const
119 {
120  return "ALWAYS";
121 }
122 
123 QStringList AbstractFloatItem::renderPosition() const
124 {
125  return QStringList( "FLOAT_ITEM" );
126 }
127 
128 void AbstractFloatItem::setVisible( bool visible )
129 {
130  // Reimplemented since AbstractFloatItem does multiple inheritance
131  // and the (set)Visible() methods are available in both base classes!
132  RenderPlugin::setVisible( visible );
133 }
134 
135 bool AbstractFloatItem::visible() const
136 {
137  // Reimplemented since AbstractFloatItem does multiple inheritance
138  // and the (set)Visible() methods are available in both base classes!
139  return RenderPlugin::visible();
140 }
141 
142 void AbstractFloatItem::setPositionLocked( bool lock )
143 {
144  ScreenGraphicsItem::GraphicsItemFlags flags = this->flags();
145 
146  if ( lock ) {
147  flags &= ~ScreenGraphicsItem::ItemIsMovable;
148  }
149  else {
150  flags |= ScreenGraphicsItem::ItemIsMovable;
151  }
152 
153  setFlags( flags );
154 }
155 
156 bool AbstractFloatItem::positionLocked() const
157 {
158  return ( flags() & ScreenGraphicsItem::ItemIsMovable ) ? false : true;
159 }
160 
161 bool AbstractFloatItem::eventFilter( QObject *object, QEvent *e )
162 {
163  if ( !enabled() || !visible() ) {
164  return false;
165  }
166 
167  if( e->type() == QEvent::ContextMenu )
168  {
169  QWidget *widget = dynamic_cast<QWidget *>( object );
170  QContextMenuEvent *menuEvent = dynamic_cast<QContextMenuEvent *> ( e );
171  if( widget != NULL && menuEvent != NULL && contains( menuEvent->pos() ) )
172  {
173  contextMenuEvent( widget, menuEvent );
174  return true;
175  }
176  return false;
177  }
178  else if( e->type() == QEvent::ToolTip )
179  {
180  QHelpEvent *helpEvent = dynamic_cast<QHelpEvent *>( e );
181  if( helpEvent != NULL && contains( helpEvent->pos() ) )
182  {
183  toolTipEvent( helpEvent );
184  return true;
185  }
186  return false;
187  }
188  else
189  return ScreenGraphicsItem::eventFilter( object, e );
190 }
191 
192 void AbstractFloatItem::contextMenuEvent ( QWidget *w, QContextMenuEvent *e )
193 {
194  contextMenu()->exec( w->mapToGlobal( e->pos() ) );
195 }
196 
197 void AbstractFloatItem::toolTipEvent ( QHelpEvent *e )
198 {
199  Q_UNUSED( e );
200 }
201 
202 void AbstractFloatItem::changeViewport( ViewportParams *viewport )
203 {
204  Q_UNUSED( viewport );
205 }
206 
207 bool AbstractFloatItem::render( GeoPainter *painter, ViewportParams *viewport,
208  const QString& renderPos, GeoSceneLayer * layer )
209 {
210  Q_UNUSED( renderPos )
211  Q_UNUSED( layer )
212 
213  changeViewport( viewport ); // may invalidate graphics item's cache
214 
215  paintEvent( painter, viewport );
216 
217  return true;
218 }
219 
220 void AbstractFloatItem::show()
221 {
222  setVisible( true );
223 }
224 
225 void AbstractFloatItem::hide()
226 {
227  setVisible( false );
228 }
229 
230 QMenu* AbstractFloatItem::contextMenu()
231 {
232  if ( !d->m_contextMenu )
233  {
234  d->m_contextMenu = new QMenu;
235 
236  QAction *lockAction = d->m_contextMenu->addAction( QIcon(":/icons/unlock.png"), tr( "&Lock" ) );
237  lockAction->setCheckable( true );
238  lockAction->setChecked( positionLocked() );
239  connect( lockAction, SIGNAL(triggered(bool)), this, SLOT(setPositionLocked(bool)) );
240 
241  if(!(flags() & ItemIsHideable)) {
242  QAction *hideAction = d->m_contextMenu->addAction( tr( "&Hide" ) );
243  connect( hideAction, SIGNAL(triggered()), this, SLOT(hide()) );
244  }
245 
246  DialogConfigurationInterface *configInterface = qobject_cast<DialogConfigurationInterface *>( this );
247  QDialog *dialog = configInterface ? configInterface->configDialog() : 0;
248  if( dialog )
249  {
250  d->m_contextMenu->addSeparator();
251  QAction *configAction = d->m_contextMenu->addAction( QIcon(":/icons/settings-configure.png"), tr( "&Configure..." ) );
252  connect( configAction, SIGNAL(triggered()), dialog, SLOT(exec()) );
253  }
254  }
255 
256  Q_ASSERT( d->m_contextMenu );
257  return d->m_contextMenu;
258 }
259 
260 }
261 
262 #include "AbstractFloatItem.moc"
Marble::AbstractFloatItem::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: AbstractFloatItem.cpp:70
Marble::RenderPlugin::visible
bool visible() const
is visible
Marble::AbstractFloatItem::visible
bool visible() const
Check visibility of the float item.
Definition: AbstractFloatItem.cpp:135
Marble::FrameGraphicsItem
Definition: FrameGraphicsItem.h:25
Marble::AbstractFloatItem::changeViewport
virtual void changeViewport(ViewportParams *viewport)
Definition: AbstractFloatItem.cpp:202
Marble::DialogConfigurationInterface
This interface allows a plugin to provide a QWidget-based configuration dialog which is accessible wi...
Definition: DialogConfigurationInterface.h:31
QDialog
Marble::GeoPainter
A painter that allows to draw geometric primitives on the map.
Definition: GeoPainter.h:98
AbstractFloatItem.h
QWidget
Marble::AbstractFloatItem::renderPosition
virtual QStringList renderPosition() const
Preferred level in the layer stack for the rendering.
Definition: AbstractFloatItem.cpp:123
Marble::AbstractFloatItem::pen
QPen pen() const
current pen for rendering
Definition: AbstractFloatItem.cpp:96
Marble::AbstractFloatItem::eventFilter
virtual bool eventFilter(QObject *object, QEvent *e)
Definition: AbstractFloatItem.cpp:161
Marble::AbstractFloatItem::renderPolicy
virtual QString renderPolicy() const
Return how the plugin settings should be used.
Definition: AbstractFloatItem.cpp:118
Marble::AbstractFloatItem::setSettings
virtual void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: AbstractFloatItem.cpp:77
Marble::AbstractFloatItem::positionLocked
bool positionLocked() const
Check is position locked.
Definition: AbstractFloatItem.cpp:156
QObject
MarbleDebug.h
Marble::AbstractFloatItem::show
void show()
Show the item.
Definition: AbstractFloatItem.cpp:220
Marble::ScreenGraphicsItem::flags
GraphicsItemFlags flags() const
Returns the flags of the item.
Definition: ScreenGraphicsItem.cpp:59
Marble::RenderPlugin::PanelRenderType
Definition: RenderPlugin.h:62
Marble::AbstractFloatItem::renderType
virtual RenderType renderType() const
Render type of the plugin.
Definition: AbstractFloatItem.cpp:91
Marble::ScreenGraphicsItem::ItemIsHideable
Definition: ScreenGraphicsItem.h:35
Marble::AbstractFloatItem::~AbstractFloatItem
virtual ~AbstractFloatItem()
Definition: AbstractFloatItem.cpp:65
Marble::MarbleGraphicsItem::contains
bool contains(const QPointF &point) const
Returns true if the Item contains point in parent coordinates.
Definition: MarbleGraphicsItem.cpp:110
Marble::GeoSceneLayer
Layer of a GeoScene document.
Definition: GeoSceneLayer.h:43
Marble::MarbleGraphicsItem::ItemCoordinateCache
Definition: MarbleGraphicsItem.h:41
Marble::AbstractFloatItem::setPen
void setPen(const QPen &pen)
setting current pen for rendering
Definition: AbstractFloatItem.cpp:101
DialogConfigurationInterface.h
Marble::RenderPlugin::setVisible
void setVisible(bool visible)
settting visible
Definition: RenderPlugin.cpp:149
GeoPainter.h
Marble::AbstractFloatItem::render
bool render(GeoPainter *painter, ViewportParams *viewport, const QString &renderPos="FLOAT_ITEM", GeoSceneLayer *layer=0)
Renders the content provided by the layer on the viewport.
Definition: AbstractFloatItem.cpp:207
Marble::ViewportParams
A public class that controls what is visible in the viewport of a Marble map.
Definition: ViewportParams.h:44
Marble::ScreenGraphicsItem::setFlags
void setFlags(GraphicsItemFlags flags)
Sets the flags to flags.
Definition: ScreenGraphicsItem.cpp:64
Marble::AbstractFloatItem::AbstractFloatItem
AbstractFloatItem(const MarbleModel *marbleModel, const QPointF &point=QPointF(10.0, 10.0), const QSizeF &size=QSizeF(150.0, 50.0))
Definition: AbstractFloatItem.cpp:53
Marble::ScreenGraphicsItem::eventFilter
virtual bool eventFilter(QObject *, QEvent *)
Definition: ScreenGraphicsItem.cpp:69
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:96
Marble::AbstractFloatItem::setPositionLocked
void setPositionLocked(bool lock)
Set is position locked.
Definition: AbstractFloatItem.cpp:142
Marble::ScreenGraphicsItem::ItemIsMovable
Definition: ScreenGraphicsItem.h:34
Marble::MarbleGraphicsItem::setCacheMode
void setCacheMode(CacheMode mode)
Set the cache mode of the item.
Definition: MarbleGraphicsItem.cpp:159
Marble::ScreenGraphicsItem::setPosition
void setPosition(const QPointF &position)
Set the position of the ScreenGraphicsItem.
Definition: ScreenGraphicsItem.cpp:44
Marble::AbstractFloatItem::setFont
void setFont(const QFont &font)
setting current font for rendering
Definition: AbstractFloatItem.cpp:112
Marble::ScreenGraphicsItem
Definition: ScreenGraphicsItem.h:30
Marble::FrameGraphicsItem::setFrame
void setFrame(FrameType type)
Sets the type of the Frame.
Definition: FrameGraphicsItem.cpp:47
Marble::MarbleGraphicsItem::update
void update()
Marks the item and all parent items as invalid.
Definition: MarbleGraphicsItem.cpp:167
Marble::AbstractFloatItem::hide
void hide()
Hide the item.
Definition: AbstractFloatItem.cpp:225
Marble::ScreenGraphicsItem::position
QPointF position() const
Return the position of the ScreenGraphicsItem.
Definition: ScreenGraphicsItem.cpp:39
Marble::AbstractFloatItem::font
QFont font() const
current font for rendering
Definition: AbstractFloatItem.cpp:107
Marble::MarbleGraphicsItem::paintEvent
bool paintEvent(QPainter *painter, const ViewportParams *viewport)
Paints the item on the screen in view coordinates.
Definition: MarbleGraphicsItem.cpp:38
Marble::RenderPlugin::enabled
bool enabled() const
is enabled
Marble::FrameGraphicsItem::RectFrame
Definition: FrameGraphicsItem.h:30
Marble::FrameGraphicsItem::setPadding
void setPadding(qreal width)
Set the padding of the item.
Definition: FrameGraphicsItem.cpp:130
Marble::FrameGraphicsItem::setContentSize
void setContentSize(const QSizeF &size)
Sets the size of the content of the item.
Definition: FrameGraphicsItem.cpp:204
Marble::RenderPlugin::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: RenderPlugin.cpp:183
Marble::AbstractFloatItem::contextMenuEvent
virtual void contextMenuEvent(QWidget *w, QContextMenuEvent *e)
Definition: AbstractFloatItem.cpp:192
Marble::RenderPlugin::RenderType
RenderType
A Type of plugin.
Definition: RenderPlugin.h:59
Marble::AbstractFloatItem::contextMenu
QMenu * contextMenu()
Definition: AbstractFloatItem.cpp:230
Marble::AbstractFloatItem::toolTipEvent
virtual void toolTipEvent(QHelpEvent *e)
Definition: AbstractFloatItem.cpp:197
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:193
Marble::DialogConfigurationInterface::configDialog
virtual QDialog * configDialog()=0
Returns a pointer to the configuration dialog of the plugin.
Marble::AbstractFloatItem::setVisible
void setVisible(bool visible)
Set visibility of the float item.
Definition: AbstractFloatItem.cpp:128
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:48 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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