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.
154 lines
5.6 KiB
154 lines
5.6 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2001 David Faure <faure@kde.org>
|
|
|
|
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 "KoRichText.h"
|
|
#include "KoTextFormat.h"
|
|
#include "KoTextParag.h"
|
|
#include "KoTextZoomHandler.h"
|
|
#include "KoTextDocument.h"
|
|
#include <kdebug.h>
|
|
#include <kcommand.h>
|
|
|
|
|
|
//void KoTextCustomItem::setPainter( TQPainter*, bool adjust ){ if ( adjust ) width = 0; }
|
|
//void KoTextCustomItem::setPainter( TQPainter*, bool ){ resize(); } // changed for kotext
|
|
|
|
bool KoTextCustomItem::enter( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy, bool atEnd )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; Q_UNUSED( atEnd ) return TRUE;
|
|
|
|
}
|
|
bool KoTextCustomItem::enterAt( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy, const TQPoint & )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
|
|
}
|
|
bool KoTextCustomItem::next( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
|
|
}
|
|
bool KoTextCustomItem::prev( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
|
|
}
|
|
bool KoTextCustomItem::down( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
|
|
}
|
|
bool KoTextCustomItem::up( KoTextCursor *, KoTextDocument *&doc, KoTextParag *¶g, int &idx, int &ox, int &oy )
|
|
{
|
|
doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
|
|
}
|
|
|
|
int KoTextCustomItem::index() const
|
|
{
|
|
Q_ASSERT( paragraph() );
|
|
KoTextParag * parag = paragraph();
|
|
return parag->findCustomItem( this );
|
|
}
|
|
|
|
KoTextFormat * KoTextCustomItem::format() const
|
|
{
|
|
KoTextParag * parag = paragraph();
|
|
//kdDebug(32500) << "KoTextCustomItem::format index=" << index() << " format=" << parag->at( index() )->format() << endl;
|
|
return parag->at( index() )->format();
|
|
}
|
|
|
|
|
|
void KoTextCustomItem::draw(TQPainter* p, int _x, int _y, int cx, int cy, int cw, int ch, const TQColorGroup& cg, bool selected )
|
|
{
|
|
KoTextZoomHandler *zh=textDocument()->paintingZoomHandler();
|
|
//kdDebug(32500)<<" x :"<<_x<<" y :"<<_y<<" cx :"<<cx<<" cy :"<<cy<<" ch :"<<ch<<" cw :"<<cw<<endl;
|
|
|
|
// Calculate index only once
|
|
// Hmm, should pass it to drawCustomItem...
|
|
int charIndex = index();
|
|
KoTextStringChar* stringChar = paragraph()->at( charIndex );
|
|
|
|
// Convert x, y, cx, cy, cw and ch from Layout Units to pixels.
|
|
int x = zh->layoutUnitToPixelX(_x) /*+ stringChar->pixelxadj*/;
|
|
int y = zh->layoutUnitToPixelY(_y);
|
|
cx = zh->layoutUnitToPixelX(cx);
|
|
cy = zh->layoutUnitToPixelY(cy);
|
|
cw = zh->layoutUnitToPixelX(_x,cw);
|
|
ch = zh->layoutUnitToPixelY(_y,ch);
|
|
int wpix = zh->layoutUnitToPixelX(_x,width);
|
|
int hpix = zh->layoutUnitToPixelX(_y,height);
|
|
//kdDebug(32500)<<"After x :"<<x<<" y :"<<y<<" cx :"<<cx<<" cy :"<<cy<<" ch :"<<ch<<" cw :"<<cw<<endl;
|
|
int ascentpix = zh->layoutUnitToPixelY( _y, ascent() );
|
|
|
|
KoTextFormat * fmt = stringChar->format();
|
|
|
|
//bool forPrint = ( p->device()->devType() == TQInternal::Printer );
|
|
p->setFont( fmt->screenFont( zh ) );
|
|
|
|
int offset=0;
|
|
if ( fmt->vAlign() == KoTextFormat::AlignSuperScript )
|
|
offset = -( hpix - p->fontMetrics().height() );
|
|
|
|
if ( fmt->shadowDistanceX() != 0 || fmt->shadowDistanceY() != 0 ) {
|
|
int sx = fmt->shadowX( zh );
|
|
int sy = fmt->shadowY( zh );
|
|
if ( sx != 0 || sy != 0 )
|
|
{
|
|
p->save();
|
|
p->translate( sx, sy );
|
|
drawCustomItem(p, x, y, wpix, hpix, ascentpix, cx, cy, cw, ch, cg, selected, offset, true);
|
|
p->restore();
|
|
}
|
|
}
|
|
drawCustomItem(p, x, y, wpix, hpix, ascentpix, cx, cy, cw, ch, cg, selected, offset, false);
|
|
}
|
|
|
|
////////////////
|
|
|
|
void CustomItemsMap::insertItems( const KoTextCursor & startCursor, int size )
|
|
{
|
|
if ( isEmpty() )
|
|
return;
|
|
|
|
KoTextCursor cursor( startCursor );
|
|
for ( int i = 0; i < size; ++i )
|
|
{
|
|
CustomItemsMap::Iterator it = find( i );
|
|
if ( it != end() )
|
|
{
|
|
kdDebug(32500) << "CustomItemsMap::insertItems setting custom item " << it.data() << endl;
|
|
cursor.parag()->setCustomItem( cursor.index(), it.data(), 0 );
|
|
it.data()->setDeleted( false );
|
|
}
|
|
cursor.gotoRight();
|
|
}
|
|
}
|
|
|
|
void CustomItemsMap::deleteAll( KMacroCommand *macroCmd )
|
|
{
|
|
Iterator it = begin();
|
|
for ( ; it != end(); ++it )
|
|
{
|
|
KoTextCustomItem * item = it.data();
|
|
KCommand * itemCmd = item->deleteCommand();
|
|
if ( itemCmd && macroCmd )
|
|
{
|
|
macroCmd->addCommand( itemCmd );
|
|
itemCmd->execute(); // the item-specific delete stuff hasn't been done
|
|
}
|
|
item->setDeleted( true );
|
|
}
|
|
}
|