You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.7 KiB
208 lines
5.7 KiB
/***************************************************************************
|
|
* Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
|
|
// qt/kde includes
|
|
#include <tqbitmap.h>
|
|
#include <tqpainter.h>
|
|
#include <tqimage.h>
|
|
#include <tqtimer.h>
|
|
#include <tdeapplication.h>
|
|
#include <kimageeffect.h>
|
|
#include <kiconloader.h>
|
|
|
|
// local includes
|
|
#include "pageviewutils.h"
|
|
#include "core/page.h"
|
|
#include "conf/settings.h"
|
|
|
|
PageViewMessage::PageViewMessage( TQWidget * parent )
|
|
: TQWidget( parent, "pageViewMessage" ), m_timer( 0 )
|
|
{
|
|
setFocusPolicy( TQWidget::NoFocus );
|
|
setBackgroundMode( NoBackground );
|
|
setPaletteBackgroundColor(kapp->palette().color(TQPalette::Active, TQColorGroup::Background));
|
|
// if the layout is LtR, we can safely place it in the right position
|
|
if ( !TQApplication::reverseLayout() )
|
|
move( 10, 10 );
|
|
resize( 0, 0 );
|
|
hide();
|
|
}
|
|
|
|
void PageViewMessage::display( const TQString & message, Icon icon, int durationMs )
|
|
// give to Caesar what Caesar owns: code taken from Amarok's osd.h/.cpp
|
|
// "redde (reddite, pl.) cesari quae sunt cesaris", just btw. ;)
|
|
{
|
|
if ( !KpdfSettings::showOSD() )
|
|
{
|
|
hide();
|
|
return;
|
|
}
|
|
|
|
// determine text rectangle
|
|
TQRect textRect = fontMetrics().boundingRect( message );
|
|
textRect.moveBy( -textRect.left(), -textRect.top() );
|
|
textRect.addCoords( 0, 0, 2, 2 );
|
|
int width = textRect.width(),
|
|
height = textRect.height(),
|
|
textXOffset = 0,
|
|
iconXOffset = 0,
|
|
shadowOffset = 1;
|
|
|
|
// load icon (if set) and update geometry
|
|
TQPixmap symbol;
|
|
if ( icon != None )
|
|
{
|
|
switch ( icon )
|
|
{
|
|
case Find:
|
|
symbol = SmallIcon( "viewmag" );
|
|
break;
|
|
case Error:
|
|
symbol = SmallIcon( "messagebox_critical" );
|
|
break;
|
|
case Warning:
|
|
symbol = SmallIcon( "messagebox_warning" );
|
|
break;
|
|
default:
|
|
symbol = SmallIcon( "messagebox_info" );
|
|
break;
|
|
}
|
|
if ( TQApplication::reverseLayout() )
|
|
{
|
|
iconXOffset = 2 + textRect.width();
|
|
}
|
|
else
|
|
{
|
|
textXOffset = 2 + symbol.width();
|
|
}
|
|
width += 2 + symbol.width();
|
|
height = TQMAX( height, symbol.height() );
|
|
}
|
|
TQRect geometry( 0, 0, width + 10, height + 8 );
|
|
|
|
// resize pixmap, mask and widget
|
|
static TQBitmap mask;
|
|
mask.resize( geometry.size() );
|
|
m_pixmap.resize( geometry.size() );
|
|
resize( geometry.size() );
|
|
|
|
// create and set transparency mask
|
|
TQPainter maskPainter( &mask);
|
|
mask.fill( TQt::black );
|
|
maskPainter.setBrush( TQt::white );
|
|
maskPainter.drawRoundRect( geometry, 1600 / geometry.width(), 1600 / geometry.height() );
|
|
setMask( mask );
|
|
|
|
// draw background
|
|
TQPainter bufferPainter( &m_pixmap );
|
|
bufferPainter.setPen( TQt::black );
|
|
bufferPainter.setBrush( paletteBackgroundColor() );
|
|
bufferPainter.drawRoundRect( geometry, 1600 / geometry.width(), 1600 / geometry.height() );
|
|
|
|
// draw icon if present
|
|
if ( !symbol.isNull() )
|
|
bufferPainter.drawPixmap( 5 + iconXOffset, 4, symbol, 0, 0, symbol.width(), symbol.height() );
|
|
|
|
// draw shadow and text
|
|
int yText = geometry.height() - height / 2;
|
|
bufferPainter.setPen( paletteBackgroundColor().dark( 115 ) );
|
|
bufferPainter.drawText( 5 + textXOffset + shadowOffset, yText + 1, message );
|
|
bufferPainter.setPen( foregroundColor() );
|
|
bufferPainter.drawText( 5 + textXOffset, yText, message );
|
|
|
|
// if the layout is RtL, we can move it to the right place only after we
|
|
// know how much size it will take
|
|
if ( TQApplication::reverseLayout() )
|
|
move( parentWidget()->width() - geometry.width() - 10, 10 );
|
|
|
|
// show widget and schedule a repaint
|
|
show();
|
|
update();
|
|
|
|
// close the message window after given mS
|
|
if ( durationMs > 0 )
|
|
{
|
|
if ( !m_timer )
|
|
{
|
|
m_timer = new TQTimer( this );
|
|
connect( m_timer, TQ_SIGNAL( timeout() ), TQ_SLOT( hide() ) );
|
|
}
|
|
m_timer->start( durationMs, true );
|
|
} else if ( m_timer )
|
|
m_timer->stop();
|
|
}
|
|
|
|
void PageViewMessage::paintEvent( TQPaintEvent * e )
|
|
{
|
|
TQPainter p( this );
|
|
p.drawPixmap( e->rect().topLeft(), m_pixmap, e->rect() );
|
|
}
|
|
|
|
void PageViewMessage::mousePressEvent( TQMouseEvent * /*e*/ )
|
|
{
|
|
if ( m_timer )
|
|
m_timer->stop();
|
|
hide();
|
|
}
|
|
|
|
|
|
|
|
PageViewItem::PageViewItem( const KPDFPage * page )
|
|
: m_page( page ), m_zoomFactor( 1.0 )
|
|
{
|
|
}
|
|
|
|
const KPDFPage * PageViewItem::page() const
|
|
{
|
|
return m_page;
|
|
}
|
|
|
|
int PageViewItem::pageNumber() const
|
|
{
|
|
return m_page->number();
|
|
}
|
|
|
|
const TQRect& PageViewItem::geometry() const
|
|
{
|
|
return m_geometry;
|
|
}
|
|
|
|
int PageViewItem::width() const
|
|
{
|
|
return m_geometry.width();
|
|
}
|
|
|
|
int PageViewItem::height() const
|
|
{
|
|
return m_geometry.height();
|
|
}
|
|
|
|
double PageViewItem::zoomFactor() const
|
|
{
|
|
return m_zoomFactor;
|
|
}
|
|
|
|
void PageViewItem::setGeometry( int x, int y, int width, int height )
|
|
{
|
|
m_geometry.setRect( x, y, width, height );
|
|
}
|
|
|
|
void PageViewItem::setWHZ( int w, int h, double z )
|
|
{
|
|
m_geometry.setWidth( w );
|
|
m_geometry.setHeight( h );
|
|
m_zoomFactor = z;
|
|
}
|
|
|
|
void PageViewItem::moveTo( int x, int y )
|
|
{
|
|
m_geometry.moveLeft( x );
|
|
m_geometry.moveTop( y );
|
|
}
|