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.
koffice/karbon/plugins/zoomtool/vzoomtool.cpp

171 lines
3.6 KiB

/* This file is part of the KDE project
Copyright (C) 2002, The Karbon Developers
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <tqcursor.h>
#include <tqevent.h>
#include <tdelocale.h>
#include "vzoomtool.h"
#include <karbon_part.h>
#include <karbon_part.h>
#include <karbon_view.h>
#include <karbon_view.h>
#include <render/vpainter.h>
#include <render/vpainterfactory.h>
#include <core/vcursor.h>
VZoomTool::VZoomTool(KarbonView *view ): VTool( view, "tool_zoom_plugin" )
{
m_plusCursor = new TQCursor( VCursor::createCursor( VCursor::ZoomPlus ) );
registerTool( this );
}
VZoomTool::~VZoomTool()
{
delete m_plusCursor;
}
TQString
VZoomTool::contextHelp()
{
TQString s = i18n( "<qt><b>Zoom tool:</b><br>" );
s += i18n( "<i>Click and drag</i> to zoom into a rectangular area.<br>" );
s += i18n( "<i>Right click</i> to zoom out of canvas.<br>" );
s += i18n( "<i>Pressing +/- keys</i><br>to zoom into/out of canvas." );
return s;
}
void
VZoomTool::activate()
{
VTool::activate();
view()->setCursor( *m_plusCursor );
}
TQString
VZoomTool::statusText()
{
return i18n( "Zoom Tool" );
}
void
VZoomTool::deactivate()
{
}
void
VZoomTool::draw()
{
VPainter *painter = view()->painterFactory()->editpainter();
painter->setRasterOp( TQt::NotROP );
if( isDragging() )
{
painter->setPen( TQt::DotLine );
painter->newPath();
painter->moveTo( KoPoint( first().x(), first().y() ) );
painter->lineTo( KoPoint( m_current.x(), first().y() ) );
painter->lineTo( KoPoint( m_current.x(), m_current.y() ) );
painter->lineTo( KoPoint( first().x(), m_current.y() ) );
painter->lineTo( KoPoint( first().x(), first().y() ) );
painter->strokePath();
}
}
void
VZoomTool::mouseButtonPress()
{
m_current = first();
recalc();
draw();
}
void
VZoomTool::rightMouseButtonRelease()
{
view()->setZoomAt( view()->zoom() * 0.75, last() );
}
void
VZoomTool::mouseButtonRelease()
{
view()->setZoomAt( view()->zoom() * 1.5, last() );
}
void
VZoomTool::mouseDrag()
{
draw();
recalc();
draw();
}
void
VZoomTool::mouseDragRelease()
{
KoRect rect( first().x(), first().y(), last().x() - first().x(), last().y() - first().y() );
rect = rect.normalize();
view()->setViewportRect( rect );
}
bool
VZoomTool::keyReleased( TQt::Key key )
{
double zoomChange = 0;
if( key == TQt::Key_Minus )
zoomChange = 0.75;
else if( key == TQt::Key_Plus )
zoomChange = 1.50;
if( zoomChange != 0 )
{
view()->setZoomAt( view()->zoom() * zoomChange );
return true;
}
return false;
}
void
VZoomTool::recalc()
{
m_current = last();
}
void
VZoomTool::setup( TDEActionCollection *collection )
{
m_action = static_cast<TDERadioAction *>(collection -> action( name() ) );
if( m_action == 0 )
{
m_action = new TDERadioAction( i18n( "Zoom Tool" ), "14_zoom", TQt::SHIFT+TQt::Key_H, this, TQT_SLOT( activate() ), collection, name() );
m_action->setToolTip( i18n( "Zoom" ) );
m_action->setExclusiveGroup( "misc" );
//m_ownAction = true;
}
}