00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
#include <qtooltip.h>
00033
#include <qlayout.h>
00034
#include <qtextedit.h>
00035
00036
#include <kapplication.h>
00037
#include <kglobalsettings.h>
00038
00039
#include "knotetip.h"
00040
#include "knotes_part_p.h"
00041
00042
00043 KNoteTip::KNoteTip( KIconView *parent )
00044 :
QFrame( 0, 0, WX11BypassWM |
00045 WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WStyle_StaysOnTop ),
00046 m_filter( false ),
00047 m_view( parent ),
00048 m_noteIVI( 0 ),
00049 m_preview( new
QTextEdit( this ) )
00050 {
00051 m_preview->setReadOnly(
true );
00052 m_preview->setHScrollBarMode( QScrollView::AlwaysOff );
00053 m_preview->setVScrollBarMode( QScrollView::AlwaysOff );
00054
00055
QBoxLayout *layout =
new QVBoxLayout(
this );
00056 layout->
addWidget( m_preview );
00057
00058 setPalette( QToolTip::palette() );
00059 setMargin( 1 );
00060 setFrameStyle( QFrame::Plain | QFrame::Box );
00061 hide();
00062 }
00063
00064 KNoteTip::~KNoteTip()
00065 {
00066
delete m_preview;
00067 }
00068
00069
void KNoteTip::setNote( KNotesIconViewItem *item, TextFormat format )
00070 {
00071
if ( m_noteIVI == item && m_format == format )
00072
return;
00073
00074 m_noteIVI = item;
00075 m_format = format;
00076
00077
if ( !m_noteIVI )
00078 {
00079 killTimers();
00080
if ( isVisible() )
00081 {
00082 setFilter(
false );
00083 hide();
00084 }
00085 }
00086
else
00087 {
00088 m_preview->setTextFormat( format );
00089 m_preview->setText( item->journal()->description() );
00090 m_preview->zoomTo( 6 );
00091 m_preview->sync();
00092
00093
int w = 400;
00094
int h = m_preview->heightForWidth( w );
00095
while ( w > 60 && h == m_preview->heightForWidth( w - 20 ) )
00096 w -= 20;
00097
00098
QRect desk = KGlobalSettings::desktopGeometry( m_noteIVI->rect().center() );
00099 resize( w, QMIN(h, desk.height()/2 - 20) );
00100
00101 hide();
00102 killTimers();
00103 setFilter(
true );
00104 startTimer( 700 );
00105 }
00106 }
00107
00108
00109
00110
00111
void KNoteTip::resizeEvent(
QResizeEvent *ev )
00112 {
00113 QFrame::resizeEvent( ev );
00114 reposition();
00115 }
00116
00117
void KNoteTip::timerEvent(
QTimerEvent * )
00118 {
00119 killTimers();
00120
if ( !isVisible() )
00121 {
00122 startTimer( 15000 );
00123 reposition();
00124 show();
00125 }
00126
else
00127 {
00128 setFilter(
false );
00129 hide();
00130 }
00131 }
00132
00133
bool KNoteTip::eventFilter(
QObject *,
QEvent *e )
00134 {
00135
switch ( e->type() )
00136 {
00137
case QEvent::Leave:
00138
case QEvent::MouseButtonPress:
00139
case QEvent::MouseButtonRelease:
00140
case QEvent::KeyPress:
00141
case QEvent::KeyRelease:
00142
case QEvent::FocusIn:
00143
case QEvent::FocusOut:
00144
case QEvent::Wheel:
00145 killTimers();
00146 setFilter(
false );
00147 hide();
00148
default:
00149
break;
00150 }
00151
00152
return false;
00153 }
00154
00155
00156
00157
00158
void KNoteTip::setFilter(
bool enable )
00159 {
00160
if ( enable == m_filter )
00161
return;
00162
00163
if ( enable )
00164 {
00165 kapp->installEventFilter(
this );
00166 QApplication::setGlobalMouseTracking(
true );
00167 }
00168
else
00169 {
00170 QApplication::setGlobalMouseTracking(
false );
00171 kapp->removeEventFilter(
this );
00172 }
00173
00174 m_filter = enable;
00175 }
00176
00177
void KNoteTip::reposition()
00178 {
00179
if ( !m_noteIVI )
00180
return;
00181
00182
QRect rect = m_noteIVI->rect();
00183
QPoint off = m_view->mapToGlobal( m_view->contentsToViewport(
QPoint( 0, 0 ) ) );
00184 rect.moveBy( off.x(), off.y() );
00185
00186
QPoint pos = rect.center();
00187
00188
00189
QRect desk = KGlobalSettings::desktopGeometry( pos );
00190
if ( rect.center().x() + width() > desk.right() )
00191 {
00192
00193
if ( pos.x() - width() < 0 )
00194 pos.setX( 0 );
00195
else
00196 pos.setX( pos.x() - width() );
00197 }
00198
00199
00200
if ( rect.bottom() + height() > desk.bottom() )
00201 {
00202
00203 pos.setY( rect.top() - height() );
00204 }
00205
else
00206 pos.setY( rect.bottom() );
00207
00208 move( pos );
00209 update();
00210 }