SVN commit 1224503 by khudyakov: Use QToolTip for showing some info for object under cursor. Much simpler than previous version also prettier and more informative CCMAIL: kstars-devel@kde.org M +8 -33 skymap.cpp M +3 -29 skymap.h M +2 -6 skymapevents.cpp --- trunk/KDE/kdeedu/kstars/kstars/skymap.cpp #1224502:1224503 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -169,11 +170,10 @@ setupProjector(); //Initialize Transient label stuff - TransientTimeout = 100; //fade label color every 0.1 sec + HoverTimer.setInterval( 500 ); HoverTimer.setSingleShot( true ); // using this timer as a single shot timer connect( &HoverTimer, SIGNAL( timeout() ), this, SLOT( slotTransientLabel() ) ); - connect( &TransientTimer, SIGNAL( timeout() ), this, SLOT( slotTransientTimeout() ) ); connect( this, SIGNAL( destinationChanged() ), this, SLOT( slewFocus() ) ); // Time infobox @@ -356,11 +356,13 @@ SkyObject *so = data->skyComposite()->objectNearest( &m_MousePoint, maxrad ); if ( so && ! isObjectLabeled( so ) ) { + QToolTip::showText( + QCursor::pos(), + i18n("%1: %2m", + so->translatedLongName(), + QString::number(so->mag(), 'f', 1)), + this); setTransientObject( so ); - - TransientColor = data->colorScheme()->colorNamed( "UserLabelColor" ); - if ( TransientTimer.isActive() ) TransientTimer.stop(); - update(); } } } @@ -368,30 +370,6 @@ //Slots -void SkyMap::slotTransientTimeout() { - //Don't fade label if the transientObject is now the focusObject! - if ( transientObject() == focusObject() && Options::useAutoLabel() ) { - setTransientObject( NULL ); - TransientTimer.stop(); - return; - } - - //to fade the labels, we will need to smoothly transition the alpha - //channel from opaque (255) to transparent (0) by step of stepAlpha - static const int stepAlpha = 12; - - //Check to see if next step produces a transparent label - //If so, point TransientObject to NULL. - if ( TransientColor.alpha() <= stepAlpha ) { - setTransientObject( NULL ); - TransientTimer.stop(); - } else { - TransientColor.setAlpha(TransientColor.alpha()-stepAlpha); - } - - update(); -} - void SkyMap::setClickedObject( SkyObject *o ) { ClickedObject = o; } @@ -878,9 +856,6 @@ } slewing = true; - //since we are slewing, fade out the transient label - if ( transientObject() && ! TransientTimer.isActive() ) - fadeTransientLabel(); forceUpdate(); qApp->processEvents(); //keep up with other stuff --- trunk/KDE/kdeedu/kstars/kstars/skymap.h #1224502:1224503 @@ -527,13 +527,6 @@ virtual void resizeEvent( QResizeEvent * ); private slots: - /**Gradually fade the Transient Hover Label into the background sky color, and - *redraw the screen after each color change. Once it has faded fully, set the - *TransientObject pointer to NULL to remove the label. - */ - void slotTransientTimeout(); - - // NOTE: Akarsh believes that this method is backend-independent, and is pretty confident about that, but he thinks that it really requires a second inspection. /**@short attach transient label to object nearest the mouse cursor. *This slot is connected to the timeout() signal of the HoverTimer, which is restarted *in every mouseMoveEvent(). So this slot is executed only if the mouse does not move for @@ -550,35 +543,18 @@ private: - /**@short Begin fading out the name label attached to TransientObject. - * - *mouseMoveEvent() will call fadeTransientLabel() when TransientObject is not a - *NULL pointer, and the TransientTimer is not already active. These conditions - *are met when the mouse did not move for HOVER_INTERVAL msec (triggering a - *TransientLabel), but the mouse has since been moved, thus ending the Hover event. - *This function merely starts the TransientTimer, whose timeout SIGNAL is - *connected to the slotTransientTimeout() SLOT, which handles the actual fading - *of the transient label, and eventually resets TransientObject to NULL. - *@sa SkyMap::slotTransientLabel(), SkyMap::slotTransientTimeout() - */ - void fadeTransientLabel() { TransientTimer.start( TransientTimeout ); } - - /**@short Sets the shape of the default mouse cursor to a cross. - */ + /**@short Sets the shape of the default mouse cursor to a cross. */ void setDefaultMouseCursor(); - /**@short Sets the shape of the mouse cursor to a magnifying glass. - */ + /**@short Sets the shape of the mouse cursor to a magnifying glass. */ void setZoomMouseCursor(); /** Calculate the zoom factor for the given keyboard modifier - * @param modifier */ double zoomFactor( const int modifier ); /** calculate the magnitude factor (1, .5, .2, or .1) for the given * keyboard modifier. - * @param modifier */ double magFactor( const int modifier ); @@ -654,9 +630,7 @@ QRect ZoomRect; //The manual-focus circle. //data for transient object labels - QTimer TransientTimer, HoverTimer; - QColor TransientColor; - unsigned int TransientTimeout; + QTimer HoverTimer; // InfoBoxes. Used in desctructor to save state InfoBoxWidget* m_timeBox; --- trunk/KDE/kdeedu/kstars/kstars/skymapevents.cpp #1224502:1224503 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -410,16 +411,11 @@ void SkyMap::mouseMoveEvent( QMouseEvent *e ) { if ( Options::useHoverLabel() ) { - //First of all, if the transientObject() pointer is not NULL, then - //we just moved off of a hovered object. Begin fading the label. - if ( transientObject() && ! TransientTimer.isActive() ) { - fadeTransientLabel(); - } - //Start a single-shot timer to monitor whether we are currently hovering. //The idea is that whenever a moveEvent occurs, the timer is reset. It //will only timeout if there are no move events for HOVER_INTERVAL ms HoverTimer.start( HOVER_INTERVAL ); + QToolTip::hideText(); } //Are we defining a ZoomRect?