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.
tdeedu/kig/modes/base_mode.cc

161 lines
4.0 KiB

// Copyright (C) 2002 Dominique Devriese <devriese@kde.org>
// 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.
// This program 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 General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
// 02110-1301, USA.
#include "base_mode.h"
#include "popup.h"
#include "../kig/kig_view.h"
#include "../kig/kig_part.h"
#include "../kig/kig_document.h"
#include <tqevent.h>
#include <kcursor.h>
BaseMode::BaseMode( KigPart& d )
: KigMode( d )
{
}
BaseMode::~BaseMode()
{
}
void BaseMode::leftClicked( TQMouseEvent* e, KigWidget* v )
{
// touch screens don't send a mouseMoved event before a click event,
// apparently, so we simulate it.
mouseMoved( e, v );
// get rid of text still showing...
v->updateCurPix();
v->updateWidget();
mplc = e->pos();
moco = mdoc.document().whatAmIOn( v->fromScreen( mplc ), *v );
if( moco.empty() )
{
// clicked on an empty spot --> we show the rectangle for
// selecting stuff...
dragRect( mplc, *v );
}
else
{
// the user clicked on some object.. --> this could either mean
// that he/she wants to select the object or that he wants to
// start moving it. We assume nothing here, we wait till he
// either moves some 4 pixels, or till he releases his mouse
// button in leftReleased() or mouseMoved()...
};
}
void BaseMode::leftMouseMoved( TQMouseEvent* e, KigWidget* w )
{
if( !moco.empty() && ( mplc - e->pos() ).manhattanLength() > 3 )
dragObject( moco, mplc, *w,
( e->state() & (ShiftButton | ControlButton ) ) != 0
);
}
void BaseMode::leftReleased( TQMouseEvent* e, KigWidget* v )
{
if( (mplc - e->pos()).manhattanLength() > 4 ) return;
ObjectHolder* o = 0;
bool keyCtrl = ( e->state() & ControlButton ) != 0;
bool keyShift = ( e->state() & ShiftButton ) != 0;
if ( ! moco.empty() )
{
if ( keyShift )
{
int id = ObjectChooserPopup::getObjectFromList( e->pos(), v, moco );
if ( id >= 0 )
o = moco[id];
}
else
o = moco.front();
}
leftClickedObject( o, e->pos(), *v, keyCtrl );
}
void BaseMode::midClicked( TQMouseEvent* e, KigWidget* v )
{
// get rid of text still showing...
v->updateCurPix();
v->updateWidget();
mplc = e->pos();
moco = mdoc.document().whatAmIOn( v->fromScreen( e->pos() ), *v );
}
void BaseMode::midReleased( TQMouseEvent* e, KigWidget* v )
{
if( (e->pos() - mplc).manhattanLength() > 4 ) return;
midClicked( mplc, *v );
}
void BaseMode::rightClicked( TQMouseEvent* e, KigWidget* w )
{
// get rid of text still showing...
w->updateCurPix();
w->updateWidget();
// set a normal cursor...
w->setCursor( KCursor::arrowCursor() );
mplc = e->pos();
moco = mdoc.document().whatAmIOn( w->fromScreen( mplc ), *w );
rightClicked( moco, mplc, *w );
}
void BaseMode::mouseMoved( TQMouseEvent* e, KigWidget* w )
{
std::vector<ObjectHolder*> os = mdoc.document().whatAmIOn( w->fromScreen( e->pos() ), *w );
mouseMoved( os, e->pos(), *w, e->state() & TQt::ShiftButton );
}
void BaseMode::dragRect( const TQPoint&, KigWidget& )
{
}
void BaseMode::leftClickedObject( ObjectHolder*, const TQPoint&,
KigWidget&, bool )
{
}
void BaseMode::dragObject( const std::vector<ObjectHolder*>&, const TQPoint&,
KigWidget&, bool )
{
}
void BaseMode::enableActions()
{
KigMode::enableActions();
}
std::vector<ObjectHolder*> BaseMode::oco()
{
return moco;
}
TQPoint BaseMode::pointLocation()
{
return mplc;
}