• 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
  • plugins
  • render
  • navigation
NavigationSlider.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 2013 Mohammed Nafees <nafees.technocool@gmail.com>
9 //
10 
11 #include "NavigationSlider.h"
12 
13 #include <QPainter>
14 #include <QMouseEvent>
15 #include <QPixmapCache>
16 
17 namespace Marble
18 {
19 
20 namespace {
21  const int handleImageHeight = 32;
22 }
23 
24 NavigationSlider::NavigationSlider(QWidget *parent) :
25  QAbstractSlider( parent ),
26  m_handleImagePath( "marble/navigation/navigational_slider_handle" )
27 {
28  setMouseTracking( true );
29 }
30 
31 NavigationSlider::~NavigationSlider()
32 {
33  QPixmapCache::remove( "marble/navigation/navigational_slider_groove" );
34  QPixmapCache::remove( "marble/navigation/navigational_slider_handle" );
35  QPixmapCache::remove( "marble/navigation/navigational_slider_handle_hover" );
36  QPixmapCache::remove( "marble/navigation/navigational_slider_handle_press" );
37 }
38 
39 QPixmap NavigationSlider::pixmap( const QString &id )
40 {
41  QPixmap result;
42  if ( !QPixmapCache::find( id, result ) ) {
43  result = QPixmap( QString( ":/%1.png" ).arg( id ) );
44  QPixmapCache::insert( id, result );
45  }
46  return result;
47 }
48 
49 void NavigationSlider::enterEvent( QEvent * )
50 {
51  setSliderDown( false );
52  if ( m_handleImagePath != "marble/navigation/navigational_slider_handle_hover" ) {
53  m_handleImagePath = "marble/navigation/navigational_slider_handle_hover";
54  repaint();
55  }
56 }
57 
58 void NavigationSlider::mouseMoveEvent( QMouseEvent *mouseEvent )
59 {
60  if ( !isSliderDown() && mouseEvent->buttons() & Qt::LeftButton ) {
61  setSliderDown( true );
62  }
63  if ( isSliderDown() ) {
64  qreal const fraction = ( mouseEvent->pos().y() - handleImageHeight/2 ) / qreal ( height() - handleImageHeight );
65  int v = ( int ) minimum() + ( ( maximum() - minimum() ) ) * ( 1 - fraction );
66  setValue( v );
67  repaint();
68  }
69 }
70 
71 void NavigationSlider::mousePressEvent( QMouseEvent * )
72 {
73  setSliderDown( true );
74  if ( m_handleImagePath != "marble/navigation/navigational_slider_handle_press" ) {
75  m_handleImagePath = "marble/navigation/navigational_slider_handle_press";
76  repaint();
77  }
78 }
79 
80 void NavigationSlider::mouseReleaseEvent( QMouseEvent * )
81 {
82  setSliderDown( false );
83  if ( m_handleImagePath != "marble/navigation/navigational_slider_handle_hover" ) {
84  m_handleImagePath = "marble/navigation/navigational_slider_handle_hover";
85  repaint();
86  }
87 }
88 
89 void NavigationSlider::leaveEvent( QEvent * )
90 {
91  setSliderDown( false );
92  if ( m_handleImagePath != "marble/navigation/navigational_slider_handle" ) {
93  m_handleImagePath = "marble/navigation/navigational_slider_handle";
94  repaint();
95  }
96 }
97 
98 void NavigationSlider::repaint()
99 {
100  emit repaintNeeded();
101 }
102 
103 void NavigationSlider::paintEvent( QPaintEvent * )
104 {
105  QPainter painter( this );
106  for ( int y = 0; y <= 160; y+=10 ) {
107  painter.drawPixmap( 0, y, pixmap( "marble/navigation/navigational_slider_groove" ) );
108 
109  }
110  qreal const fraction = ( value() - minimum() ) / qreal( maximum() - minimum() );
111  int const y = ( height() - handleImageHeight ) * ( 1 - fraction );
112  painter.drawPixmap( 0, y, pixmap( m_handleImagePath ) );
113  painter.end();
114 }
115 
116 }
117 
118 #include "NavigationSlider.moc"
QPainter
Marble::NavigationSlider::mousePressEvent
void mousePressEvent(QMouseEvent *)
Definition: NavigationSlider.cpp:71
QWidget
Marble::NavigationSlider::~NavigationSlider
~NavigationSlider()
Definition: NavigationSlider.cpp:31
Marble::NavigationSlider::mouseReleaseEvent
void mouseReleaseEvent(QMouseEvent *)
Definition: NavigationSlider.cpp:80
Marble::NavigationSlider::pixmap
QPixmap pixmap(const QString &id)
Definition: NavigationSlider.cpp:39
Marble::NavigationSlider::paintEvent
void paintEvent(QPaintEvent *)
Definition: NavigationSlider.cpp:103
NavigationSlider.h
Marble::NavigationSlider::mouseMoveEvent
void mouseMoveEvent(QMouseEvent *mouseEvent)
Definition: NavigationSlider.cpp:58
Marble::NavigationSlider::enterEvent
void enterEvent(QEvent *)
Definition: NavigationSlider.cpp:49
QAbstractSlider
Marble::NavigationSlider::leaveEvent
void leaveEvent(QEvent *)
Definition: NavigationSlider.cpp:89
Marble::NavigationSlider::repaintNeeded
void repaintNeeded()
Marble::NavigationSlider::repaint
void repaint()
Definition: NavigationSlider.cpp:98
Marble::NavigationSlider::NavigationSlider
NavigationSlider(QWidget *parent=0)
Definition: NavigationSlider.cpp:24
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:51 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