25#include <tqprogressdialog.h>
27#include <tqtextstream.h>
29#include <tqpaintdevicemetrics.h>
31#include <tqapplication.h>
32#include <tdepopupmenu.h>
34#include <tqdatetime.h>
35#include <tqdropsite.h>
39#include <tqclipboard.h>
41#include <tdeapplication.h>
42#include <kmimemagic.h>
44#include <kiconloader.h>
47#include <tdeglobalsettings.h>
48#include <tdetempfile.h>
51#include <tdemessagebox.h>
52#include <tdemultipledrag.h>
56#include <tdeio/netaccess.h>
58#include <KoParagCounter.h>
60#include <KoTextZoomHandler.h>
62#include <KoStoreDrag.h>
63#include "KoPointArray.h"
67#include "KPrBackground.h"
68#include "KPrPixmapObject.h"
69#include "KPrFreehandObject.h"
70#include "KPrBezierCurveObject.h"
71#include "KPrGotoPage.h"
72#include "KPrTextObject.h"
73#include "KPrSoundPlayer.h"
74#include "KPrNoteBar.h"
75#include "KPrPartObject.h"
77#include "KPrCommand.h"
78#include "KPrPolylineObject.h"
79#include "KPrClosedLineObject.h"
81#include "KPrVariableCollection.h"
82#include "KPrGroupObject.h"
83#include "KPrDocument.h"
86#include "KPrCanvas.moc"
88#include "KPrEffectHandler.h"
89#include "KPrPageEffects.h"
92const int KPrCanvas::MOUSE_SNAP_DISTANCE = 4;
93const int KPrCanvas::KEY_SNAP_DISTANCE = 2;
96: TQWidget( parent, name, WStaticContents|WResizeNoErase|WRepaintNoErase )
98, m_gl( _view, _view->zoomHandler() )
99, m_paintGuides( false )
100, m_objectDisplayAbove( 0 )
103 m_currentTextObjectView=0L;
109 m_keyPressEvent =
false;
110 m_drawSymetricObject =
false;
112 showingLastSlide =
false;
113 mousePressed =
false;
119 setBackgroundMode( TQt::NoBackground );
122 setMouseTracking(
true );
125 m_step.m_pageNumber = 0;
127 m_step.m_subStep = 0;
132 m_zoomRubberDraw =
false;
133 toolEditMode = TEM_MOUSE;
134 setAcceptDrops(
true );
137 m_isResizing =
false;
138 mouseSelectedObject =
false;
139 m_setPageTimer =
true;
140 m_drawLineInDrawMode =
false;
142 m_disableSnapping =
false;
143 m_drawPolyline =
false;
144 m_drawCubicBezierCurve =
false;
145 m_drawLineWithCubicBezierCurve =
true;
146 m_oldCubicBezierPointArray.putPoints( 0, 4, 0.0, 0.0, 0.0, 0.0,
147 0.0, 0.0, 0.0, 0.0 );
155 setFocusPolicy( TQWidget::StrongFocus );
157 setKeyCompression(
true );
158 setInputMethodEnabled(
true );
159 installEventFilter(
this );
160 KCursor::setAutoHideCursor(
this,
true,
true );
161 m_zoomBeforePresentation=100;
165 m_activePage=m_view->kPresenterDoc()->pageList().getFirst();
166 connect( m_view->kPresenterDoc(), TQ_SIGNAL( sig_terminateEditing( KPrTextObject * ) ),
167 this, TQ_SLOT( terminateEditing( KPrTextObject * ) ) );
168 connect( m_view, TQ_SIGNAL( autoScroll(
const TQPoint & )),
this, TQ_SLOT( slotAutoScroll(
const TQPoint &)));
172 connect( kospeaker, TQ_SIGNAL( customSpeakWidget(TQWidget*,
const TQPoint&, uint) ),
173 this, TQ_SLOT( speakTextUnderMouse(TQWidget*,
const TQPoint&, uint) ) );
182 exitEditMode(
false );
191void KPrCanvas::scrollX(
int x )
194 int dx = m_xOffset - x;
197 bitBlt( &buffer, dx, 0, &buffer );
201void KPrCanvas::scrollY(
int y )
204 int dy = m_yOffset - y;
207 bitBlt( &buffer, 0, dy, &buffer );
211bool KPrCanvas::eventFilter( TQObject *o, TQEvent *e )
215 if ( m_currentTextObjectView )
216 KCursor::autoHideEventFilter( o, e );
219 case TQEvent::FocusIn:
220 if ( m_currentTextObjectView )
221 m_currentTextObjectView->focusInEvent();
223 case TQEvent::FocusOut:
224 if ( m_currentTextObjectView )
225 m_currentTextObjectView->focusOutEvent();
227 case TQEvent::KeyPress:
229 TQKeyEvent * keyev =
static_cast<TQKeyEvent*
>(e);
230 if ( keyev->key() == TDEGlobalSettings::contextMenuKey() ) {
234 if ( m_currentTextObjectView &&
235 (keyev->key()==TQt::Key_Home ||keyev->key()==Key_End
236 || keyev->key()==TQt::Key_Tab || keyev->key()==Key_Prior
237 || keyev->key()==TQt::Key_Next || keyev->key() == Key_Backtab) )
239 m_currentTextObjectView->keyPressEvent( keyev );
242 else if ( !m_currentTextObjectView && keyev->key()==TQt::Key_Tab )
244 keyPressEvent(keyev);
249 case TQEvent::AccelOverride:
252 TQKeyEvent * keyev =
static_cast<TQKeyEvent*
>(e);
254 if ( ( keyev->state() & ControlButton ) && ( keyev->state() & ShiftButton ) )
256 switch ( keyev->key() ) {
275 return TQWidget::eventFilter(o,e);
278bool KPrCanvas::focusNextPrevChild(
bool )
285 if ( isUpdatesEnabled() )
288 KPrDocument *doc =m_view->kPresenterDoc();
290 if ( ! m_paintGuides )
293 TQPainter bufPainter;
294 bufPainter.begin( &buffer,
this );
295 bufPainter.translate( -diffx(), -diffy() );
296 bufPainter.setBrushOrigin( -diffx(), -diffy() );
299 bufPainter.setClipRect( crect );
303 crect.moveBy( diffx(), diffy() );
306 if ( editMode || !fillBlack )
307 bufPainter.fillRect( crect, white );
309 bufPainter.fillRect( crect, black );
311 KPrPage * page = editMode ? m_activePage : doc->pageList().at( m_step.m_pageNumber );
316 SelectionMode selectionMode;
318 if ( toolEditMode == TEM_MOUSE || toolEditMode == TEM_ZOOM )
319 selectionMode = SM_MOVERESIZE;
320 else if ( toolEditMode == TEM_ROTATE )
321 selectionMode = SM_ROTATE;
323 selectionMode = SM_NONE;
325 if ( doc->showGrid() )
328 drawEditPage( &bufPainter, crect, page, selectionMode );
336 TQRect desk = TDEGlobalSettings::desktopGeometry(
this);
337 TQRect pgRect = m_view->kPresenterDoc()->pageList().at(0)->getZoomPageRect();
338 int offx = 0, offy = 0;
339 if ( desk.width() > pgRect.width() )
340 offx = ( desk.width() - pgRect.width() ) / 2;
341 if ( desk.height() > pgRect.height() )
342 offy = ( desk.height() - pgRect.height() ) / 2;
343 bufPainter.translate( offx, offy );
346 PresStep step( m_step.m_pageNumber, m_step.m_step, m_step.m_subStep, m_effectTimer.isActive(), !goingBack );
348 if ( m_drawMode && m_drawModeLines.count() )
351 bufPainter.setPen( m_view->kPresenterDoc()->presPen() );
352 for (
unsigned int i = 0; i < m_drawModeLines.count(); ++i )
354 bufPainter.drawPolyline( m_drawModeLines[i] );
356 bufPainter.restore();
364 TQPixmap topBuffer( buffer );
365 TQPainter topPainter( &topBuffer, &buffer );
366 topPainter.translate( -diffx(), -diffy() );
367 topPainter.setBrushOrigin( -diffx(), -diffy() );
369 if ( editMode && doc->showGuideLines() )
371 m_gl.paintGuides( topPainter );
374 topPainter.setPen( TQPen( TQt::black, 1, TQt::SolidLine ) );
375 topPainter.setRasterOp( NotROP );
376 switch ( toolEditMode )
381 topPainter.setPen( TQPen( black, 0, DotLine ) );
382 topPainter.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
386 if ( !m_insertRect.isNull() )
388 topPainter.drawRoundRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ),
389 m_view->getRndX(), m_view->getRndY() );
393 if ( !m_insertRect.isNull() )
395 topPainter.drawEllipse( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
406 if ( !m_insertRect.isNull() )
408 topPainter.drawRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
412 if ( !m_insertRect.isNull() )
414 drawPieObject( &topPainter, m_insertRect );
418 topPainter.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
419 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
422 case INS_CLOSED_FREEHAND:
424 case INS_CLOSED_POLYLINE:
426 TQPointArray pointArray = m_pointArray.zoomPointArray( m_view->zoomHandler() );
427 topPainter.drawPolyline( pointArray );
428 topPainter.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
429 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
431 case INS_QUADRICBEZIERCURVE:
432 case INS_CUBICBEZIERCURVE:
433 case INS_CLOSED_QUADRICBEZIERCURVE:
434 case INS_CLOSED_CUBICBEZIERCURVE:
435 if ( m_drawCubicBezierCurve )
437 if ( m_indexPointArray > 0 )
445 drawPolygon( topPainter, m_insertRect );
461 TQRect pageRect = page->getZoomPageRect();
463 if ( rect.intersects( pageRect ) )
465 if ( page->displayBackground() )
467 if ( page->masterPage() && page->useMasterBackground() )
468 page->masterPage()->background()->drawBackground( painter, m_view->zoomHandler(), rect,
true );
470 page->background()->drawBackground( painter, m_view->zoomHandler(), rect,
true );
474 pageRect.rLeft() -= 1;
475 pageRect.rTop() -= 1;
476 pageRect.rRight() += 1;
477 pageRect.rBottom() += 1;
479 TQRegion grayRegion( rect );
480 grayRegion -= pageRect;
483 if ( !grayRegion.isEmpty() )
484 eraseEmptySpace( painter, grayRegion, TQApplication::palette().active().brush( TQColorGroup::Mid ) );
491 TQRect desk = TDEGlobalSettings::desktopGeometry(getView());
492 TQRect crect = desk.intersect( rect );
493 if ( crect.isEmpty() || !page->displayBackground())
496 if ( page->masterPage() && page->useMasterBackground() )
497 page->masterPage()->background()->drawBackground( painter, desk.size(), crect,
false );
499 page->background()->drawBackground( painter, desk.size(), crect,
false );
505void KPrCanvas::eraseEmptySpace( TQPainter * painter,
const TQRegion & emptySpaceRegion,
const TQBrush & brush )
const
508 painter->setClipRegion( emptySpaceRegion, TQPainter::CoordPainter );
509 painter->setPen( TQt::NoPen );
512 painter->fillRect( emptySpaceRegion.boundingRect(), brush );
518 bool contour, KPrTextView * textView,
int pageNum )
const
520 TQPtrListIterator<KPrObject> it( objects );
521 for ( ; it.current(); ++it )
523 SelectionMode selMode = selectionMode;
524 if ( selectionMode != SM_NONE
525 && it.current()->isSelected()
526 && ( m_view->kPresenterDoc()->isHeaderFooter(it.current())
527 || it.current()->isProtect() ) )
528 selMode = SM_PROTECT;
530 it.current()->draw( painter, m_view->zoomHandler(), pageNum, selMode, (it.current()->isSelected()) && contour );
532 it.current()->setSubPresStep( 0 );
533 it.current()->doSpecificEffects(
false );
538 textView->kpTextObject()->paintEdited( painter, m_view->zoomHandler(),
false ,
539 textView->cursor(),
true );
546 TQPtrList<KPrObject> objects;
548 TQPtrListIterator<KPrObject> it( _objects );
549 for ( ; it.current(); ++it )
551 if ( objectIsAHeaderFooterHidden(it.current()) )
553 if ( it.current()->getAppearStep() <= step.m_step
554 && ( ! it.current()->getDisappear()
555 || it.current()->getDisappear()
556 && it.current()->getDisappearStep() > step.m_step ) )
558 if ( step.m_animate && it.current()->getAppearStep() == step.m_step && it.current()->getEffect() != EF_NONE )
561 if ( step.m_animateSub && it.current()->getAppearStep() == step.m_step )
563 it.current()->setSubPresStep( step.m_subStep );
564 it.current()->doSpecificEffects(
true,
false );
567 objects.append( it.current() );
570 drawObjects( painter, objects, SM_NONE,
false, NULL, step.m_pageNumber );
575 SelectionMode selectionMode,
int pageNum )
const
577 TQPtrList<KPrObject> objects;
579 KPrTextView * textView = NULL;
580 TQPtrListIterator<KPrObject> it( _objects );
581 for ( ; it.current(); ++it )
583 if ( objectIsAHeaderFooterHidden(it.current()) )
586 if ( rect.intersects( it.current()->getRepaintRect() ) )
588 if ( m_currentTextObjectView && m_currentTextObjectView->kpTextObject() == it.current() )
590 textView = m_currentTextObjectView;
593 objects.append( it.current() );
596 drawObjects( painter, objects, selectionMode, drawContour, textView, pageNum );
601 KPrPage *page, SelectionMode selectionMode )
const
603 KoRect rect = m_view->zoomHandler()->unzoomRect(_rect);
605 int pageNum = m_view->kPresenterDoc()->pageList().findRef( page );
607 if ( page->masterPage() && page->displayObjectFromMasterPage() )
608 drawObjectsEdit( painter, rect, page->masterPage()->objectList(), selectionMode, pageNum );
610 drawObjectsEdit( painter, rect, displayObjectList(), selectionMode, pageNum );
616 KoRect rect = m_view->zoomHandler()->unzoomRect(_rect);
618 KPrPage * page = m_view->kPresenterDoc()->pageList().at(step.m_pageNumber);
620 if ( page->masterPage() && page->displayObjectFromMasterPage() )
629 KPrDocument *doc=m_view->kPresenterDoc();
631 if(!doc->isReadWrite())
633 TQPen _pen = TQPen( doc->gridColor(), 6, TQt::DotLine );
635 painter->setPen( _pen );
636 TQRect pageRect = m_activePage->getZoomPageRect();
638 int zoomedX, zoomedY;
639 double offsetX = doc->getGridX();
640 double offsetY = doc->getGridY();
642 for (
double i = offsetX; ( zoomedX = m_view->zoomHandler()->zoomItX( i )+pageRect.left() ) < pageRect.right(); i += offsetX )
643 for (
double j = offsetY; ( zoomedY = m_view->zoomHandler()->zoomItY( j )+pageRect.top() ) < pageRect.bottom(); j += offsetY )
644 if( rect2.contains( zoomedX, zoomedY ) )
645 painter->drawPoint( zoomedX, zoomedY );
655 TQPtrListIterator<KPrObject> it( obj );
656 for ( ; it.current(); ++it ) {
657 if ( objectIsAHeaderFooterHidden( it.current() ) )
659 it.current()->draw( painter, m_view->zoomHandler(), pageNum, SM_NONE,
false );
663void KPrCanvas::recalcAutoGuides( )
665 TQValueList<double> horizontalPos;
666 TQValueList<double> verticalPos;
667 TQPtrListIterator<KPrObject> it( m_activePage->objectList() );
668 for ( ; it.current(); ++it )
670 if( ! it.current()->isSelected() )
671 it.current()->addSelfToGuides( horizontalPos, verticalPos);
674 m_gl.setAutoGuideLines( horizontalPos, verticalPos );
677void KPrCanvas::mousePressEvent( TQMouseEvent *e )
679 TQPoint contentsPoint( e->pos().x()+diffx(), e->pos().y()+diffy() );
680 KoPoint docPoint = m_view->zoomHandler()->unzoomPoint( contentsPoint );
681 m_insertRect = KoRect();
683 if(!m_view->koDocument()->isReadWrite())
686 if ( editMode && m_view->kPresenterDoc()->showGuideLines() && toolEditMode == TEM_MOUSE && m_gl.mousePressEvent( e ) )
689 m_moveStartPosMouse =
objectRect(
false ).topLeft();
690 if(m_currentTextObjectView)
692 KPrTextObject *txtObj=m_currentTextObjectView->kpTextObject();
694 if(txtObj->contains( docPoint ))
696 KoPoint pos = docPoint - txtObj->innerRect().topLeft();
698 m_currentTextObjectView->mousePressEvent(e, m_view->zoomHandler()->ptToLayoutUnitPix( pos ) );
700 m_view->enableAutoScroll();
701 if(e->button() == TQt::RightButton)
703 m_currentTextObjectView->showPopup( m_view, TQCursor::pos(), m_view->actionList() );
704 m_view->disableAutoScroll();
707 else if( e->button() == TQt::MidButton )
709 TQApplication::clipboard()->setSelectionMode(
true );
710 m_currentTextObjectView->paste();
711 TQApplication::clipboard()->setSelectionMode(
false );
718 KPrObject *kpobject = 0;
720 m_disableSnapping = e->state() & ShiftButton;
725 if ( e->button() == TQt::LeftButton ) {
727 m_view->enableAutoScroll();
729 if ( m_drawPolyline && ( toolEditMode == INS_POLYLINE || toolEditMode == INS_CLOSED_POLYLINE ) )
731 m_startPoint = snapPoint( docPoint );
732 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
738 if ( m_drawCubicBezierCurve && ( toolEditMode == INS_CUBICBEZIERCURVE
739 || toolEditMode == INS_QUADRICBEZIERCURVE
740 || toolEditMode == INS_CLOSED_CUBICBEZIERCURVE
741 || toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE ) ) {
742 if ( m_drawLineWithCubicBezierCurve ) {
744 p.setPen( TQPen( TQt::black, 1, TQt::SolidLine ) );
745 p.setBrush( TQt::NoBrush );
746 p.setRasterOp( TQt::NotROP );
748 p.translate( -diffx(), -diffy() );
749 KoPoint newStartPoint = snapPoint( docPoint );
751 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
752 m_view->zoomHandler()->zoomPoint( newStartPoint ) );
754 m_startPoint = newStartPoint;
757 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
760 m_drawLineWithCubicBezierCurve =
false;
764 TQPen _pen = TQPen( TQt::black, 1, TQt::DashLine );
766 p.setBrush( TQt::NoBrush );
767 p.setRasterOp( TQt::NotROP );
769 p.translate( -diffx(), -diffy() );
772 KoPoint endPoint = snapPoint( docPoint );
774 double angle = KoPoint::getAngle( endPoint, m_startPoint );
776 drawFigure( L_SQUARE, &p, endPoint, _pen.color(), _pen.width(), angle, m_view->zoomHandler() );
780 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
781 m_view->zoomHandler()->zoomPoint( endPoint ) );
783 m_symmetricEndPoint = m_startPoint * 2 - endPoint;
786 angle = KoPoint::getAngle( m_symmetricEndPoint, m_startPoint );
788 drawFigure( L_SQUARE, &p, m_symmetricEndPoint, _pen.color(), _pen.width(), angle, m_view->zoomHandler() );
792 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
793 m_view->zoomHandler()->zoomPoint( m_symmetricEndPoint ) );
795 m_pointArray.putPoints( m_indexPointArray, 3, m_CubicBezierSecondPoint.x(), m_CubicBezierSecondPoint.y(),
796 m_CubicBezierThirdPoint.x(), m_CubicBezierThirdPoint.y(),
797 m_startPoint.x(), m_startPoint.y() );
798 m_indexPointArray += 3;
799 m_drawLineWithCubicBezierCurve =
true;
800 m_oldCubicBezierPointArray = KoPointArray();
801 m_oldCubicBezierPointArray.putPoints( 0, 4, (
double)0,(
double)0, (
double)0,(
double)0,
802 (
double)0,(
double)0, (
double)0,(
double)0 );
803 m_endPoint = m_startPoint;
809 switch ( toolEditMode ) {
811 KPrObject *kpobject =
getObjectAt( docPoint,
true );
815 if ( e->state() & ControlButton && kpobject->isSelected() )
816 deSelectObj( kpobject );
817 else if ( e->state() & ControlButton )
819 selectObj( kpobject );
820 raiseObject( kpobject );
821 m_moveStartPosMouse =
objectRect(
false ).topLeft();
825 if ( modType != MT_MOVE || !kpobject->isSelected() )
828 selectObj( kpobject );
829 raiseObject( kpobject );
830 m_moveStartPosMouse =
objectRect(
false ).topLeft();
834 if ( modType != MT_MOVE && modType != MT_NONE )
837 selectObj( kpobject );
838 raiseObject( kpobject );
840 m_resizeObject = kpobject;
842 m_ratio =
static_cast<double>( kpobject->getSize().width() ) /
843 static_cast<double>( kpobject->getSize().height() );
844 m_rectBeforeResize = kpobject->getRect();
847 if ( m_view->kPresenterDoc()->showGuideLines() && !m_disableSnapping )
854 KPrPage *masterPage = m_activePage->masterPage();
855 if ( masterPage && m_activePage->displayObjectFromMasterPage() )
857 kpobject = masterPage->getObjectAt( docPoint,
true );
859 if ( kpobject && objectIsAHeaderFooterHidden( kpobject ) )
867 mousePressed =
false;
868 TQString msg( i18n(
"The object you are trying to select belongs to the master slide. "
869 "Editing the object can only be done on the master slide.\n"
871 m_view->disableAutoScroll();
872 if ( KMessageBox::questionYesNo(
this, msg ) == KMessageBox::Yes )
874 getView()->setEditMaster(
true );
875 selectObj( kpobject );
876 raiseObject( kpobject );
877 m_moveStartPosMouse =
objectRect(
false ).topLeft();
887 if ( !( e->state() & ShiftButton ) && !( e->state() & ControlButton ) )
891 m_rubber = KoRect( docPoint.x(), docPoint.y(), 0, 0 );
894 m_origMousePos = docPoint;
899 m_zoomRubberDraw =
false;
900 m_rubber = KoRect( docPoint.x(), docPoint.y(), 0, 0 );
910 if ( kpobject && !kpobject->isProtect())
912 m_rotateObject = kpobject;
913 m_rotateStart = docPoint;
914 m_angleBeforeRotate = kpobject->getAngle();
915 selectObj( kpobject );
916 raiseObject( kpobject );
919 m_rotateCenter = kpobject->getRealRect().center();
927 m_startPoint = snapPoint( docPoint );
928 m_endPoint = m_startPoint;
930 case INS_FREEHAND:
case INS_CLOSED_FREEHAND: {
935 m_indexPointArray = 0;
936 m_startPoint = snapPoint( docPoint );
937 m_endPoint = m_startPoint;
938 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
941 case INS_POLYLINE:
case INS_CLOSED_POLYLINE: {
946 m_drawPolyline =
true;
947 m_indexPointArray = 0;
948 m_startPoint = snapPoint( docPoint );
949 m_endPoint = m_startPoint;
950 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
953 case INS_CUBICBEZIERCURVE:
case INS_QUADRICBEZIERCURVE:
954 case INS_CLOSED_CUBICBEZIERCURVE:
case INS_CLOSED_QUADRICBEZIERCURVE: {
959 m_drawCubicBezierCurve =
true;
960 m_drawLineWithCubicBezierCurve =
true;
961 m_indexPointArray = 0;
963 m_oldCubicBezierPointArray.putPoints( 0, 4, (
double)0,(
double)0, (
double)0,(
double)0,
964 (
double)0,(
double)0, (
double)0,(
double)0 );
965 m_startPoint = snapPoint( docPoint );
966 m_endPoint = m_startPoint;
967 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
975 KoPoint sp( snapPoint( docPoint ) );
976 m_insertRect = KoRect( sp.x(), sp.y(),0 ,0 );
981 if ( e->button() == TQt::RightButton && ( toolEditMode == INS_POLYLINE || toolEditMode == INS_CLOSED_POLYLINE )
982 && !m_pointArray.isNull() && m_drawPolyline ) {
983 if( m_indexPointArray > 1)
986 p.setPen( TQPen( black, 1, SolidLine ) );
987 p.setBrush( NoBrush );
988 p.translate( -diffx(), -diffy() );
990 p.setRasterOp( NotROP );
993 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
994 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
996 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
997 m_view->zoomHandler()->zoomPoint( m_pointArray.at( m_indexPointArray - 2 ) ) );
1000 m_indexPointArray = TQMAX( 1, m_indexPointArray - 1 );
1001 m_pointArray.resize( m_indexPointArray );
1002 m_startPoint = m_pointArray.at( m_indexPointArray - 1 );
1004 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1005 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
1009 else if( m_indexPointArray == 1)
1011 TQPainter p(
this );
1012 p.setPen( TQPen( black, 1, SolidLine ) );
1013 p.setBrush( NoBrush );
1014 p.setRasterOp( NotROP );
1015 p.translate( -diffx(), -diffy() );
1016 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1017 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
1019 m_pointArray = KoPointArray();
1020 m_indexPointArray = 0;
1022 m_drawPolyline =
false;
1023 m_view->disableAutoScroll();
1024 mousePressed =
false;
1029 if ( e->button() == TQt::RightButton && ( toolEditMode == INS_CUBICBEZIERCURVE || toolEditMode == INS_QUADRICBEZIERCURVE
1030 || toolEditMode == INS_CLOSED_CUBICBEZIERCURVE || toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE )
1031 && !m_pointArray.isNull() && m_drawCubicBezierCurve ) {
1032 if ( m_drawLineWithCubicBezierCurve ) {
1033 KoPoint point = snapPoint( docPoint );
1034 m_pointArray.putPoints( m_indexPointArray, 1, point.x(), point.y() );
1035 ++m_indexPointArray;
1038 m_pointArray.putPoints( m_indexPointArray, 2, m_CubicBezierSecondPoint.x(), m_CubicBezierSecondPoint.y(),
1039 m_CubicBezierThirdPoint.x(), m_CubicBezierThirdPoint.y() );
1040 m_indexPointArray += 2;
1043 endDrawCubicBezierCurve();
1045 m_gl.repaintAfterSnapping();
1050 if ( e->button() == TQt::RightButton && toolEditMode == TEM_MOUSE ) {
1055 TQPoint pnt = TQCursor::pos();
1056 mousePressed =
false;
1057 m_view->disableAutoScroll();
1058 bool state=!( e->state() & ShiftButton ) && !( e->state() & ControlButton ) && !kpobject->isSelected();
1062 selectObj( kpobject );
1065 TQPoint pnt = TQCursor::pos();
1066 m_view->openPopupMenuMenuPage( pnt );
1067 m_view->disableAutoScroll();
1068 mousePressed =
false;
1073 else if( e->button() == TQt::RightButton && toolEditMode == TEM_ZOOM ) {
1074 TQPoint pnt = TQCursor::pos();
1075 mousePressed =
false;
1076 m_view->disableAutoScroll();
1077 m_view->openPopupMenuZoom( pnt );
1079 else if( e->button() == TQt::RightButton && toolEditMode != TEM_MOUSE ) {
1081 setToolEditMode( TEM_MOUSE );
1084 if ( e->button() == TQt::LeftButton ) {
1086 setCursor( KPrUtils::penCursor() );
1087 m_drawLineInDrawMode =
true;
1088 m_drawModeLineIndex = 0;
1089 m_drawModeLines.append( TQPointArray() );
1090 m_drawModeLines[m_drawModeLines.count() - 1].putPoints( m_drawModeLineIndex++, 1, e->x(), e->y() );
1093 m_view->screenNext();
1094 }
else if ( e->button() == TQt::MidButton )
1095 m_view->screenPrev();
1096 else if ( e->button() == TQt::RightButton ) {
1097 if ( !m_drawMode && !spManualSwitch() )
1101 m_view->stopAutoPresTimer();
1104 setCursor( arrowCursor );
1105 TQPoint pnt = TQCursor::pos();
1106 int ret = m_presMenu->exec( pnt );
1108 if ( ret == -1 && !m_presMenu->isItemChecked( PM_DM ) && !spManualSwitch() )
1109 m_view->continueAutoPresTimer();
1116 if ( toolEditMode == TEM_MOUSE )
1117 mouseMoveEvent( e );
1121KoRect KPrCanvas::getAlignBoundingRect()
const
1123 KoRect boundingRect;
1125 TQPtrListIterator<KPrObject> it( m_activePage->objectList() );
1126 for ( ; it.current() ; ++it )
1128 if ( it.current() == m_view->kPresenterDoc()->header() ||
1129 it.current() == m_view->kPresenterDoc()->footer() )
1132 if( it.current()->isSelected() && !it.current()->isProtect() ) {
1133 boundingRect |= it.current()->getRealRect();
1136 return boundingRect;
1139void KPrCanvas::mouseReleaseEvent( TQMouseEvent *e )
1141 if ( editMode && m_view->kPresenterDoc()->showGuideLines() && toolEditMode == TEM_MOUSE && m_gl.mouseReleaseEvent( e ) )
1144 TQPoint contentsPoint( e->pos().x()+diffx(), e->pos().y()+diffy() );
1145 if(m_currentTextObjectView)
1147 m_currentTextObjectView->mouseReleaseEvent( e, contentsPoint );
1148 emit objectSelectedChanged();
1149 m_view->disableAutoScroll();
1154 if ( e->button() != TQt::LeftButton )
1158 m_drawLineInDrawMode =
false;
1159 m_drawModeLines[m_drawModeLines.count() - 1].putPoints( m_drawModeLineIndex++, 1, contentsPoint.x(), contentsPoint.y() );
1163 TQPtrList<KPrObject> _objects;
1164 _objects.setAutoDelete(
false );
1166 if ( ( m_drawPolyline && ( toolEditMode == INS_POLYLINE || toolEditMode == INS_CLOSED_POLYLINE ) )
1167 || ( m_drawCubicBezierCurve && ( toolEditMode == INS_CUBICBEZIERCURVE || toolEditMode == INS_QUADRICBEZIERCURVE
1168 || toolEditMode == INS_CLOSED_CUBICBEZIERCURVE || toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE ) ) ) {
1172 m_insertRect = m_insertRect.normalize();
1174 switch ( toolEditMode ) {
1176 drawContour =
false;
1177 switch ( modType ) {
1183 p.setRasterOp( NotROP );
1184 p.setPen( TQPen( black, 0, DotLine ) );
1185 p.translate( -diffx(), -diffy() );
1186 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1190 m_rubber = m_rubber.normalize();
1192 TQPtrListIterator<KPrObject> it( getObjectList() );
1193 for ( ; it.current() ; ++it )
1195 if ( it.current()->intersects( m_rubber ) )
1197 if( objectIsAHeaderFooterHidden(it.current()))
1199 it.current()->setSelected(
true );
1200 mouseSelectedObject =
true;
1204 if ( mouseSelectedObject )
1206 emit objectSelectedChanged();
1210 KoPoint move(
objectRect(
false ).topLeft() - m_moveStartPosMouse );
1211 if ( move != KoPoint( 0, 0 ) )
1213 KCommand *cmd=m_activePage->moveObject(m_view, move.x(), move.y());
1215 m_view->kPresenterDoc()->addCommand( cmd );
1218 m_activePage->repaintObj();
1224 finishResizeObject( i18n(
"Resize Object Up" ) );
1227 finishResizeObject( i18n(
"Resize Object Down" ),
false );
1230 finishResizeObject( i18n(
"Resize Object Left" ) );
1233 finishResizeObject( i18n(
"Resize Object Right" ) );
1236 finishResizeObject( i18n(
"Resize Object Left && Up" ) );
1239 finishResizeObject( i18n(
"Resize Object Left && Down" ) );
1242 finishResizeObject( i18n(
"Resize Object Right && Up" ) );
1245 finishResizeObject( i18n(
"Resize Object Right && Down" ) );
1250 if ( !m_insertRect.isNull() )
1253 setToolEditMode( TEM_MOUSE );
1256 createEditing( kptextobject );
1262 drawContour =
false;
1263 if( modType == MT_NONE && drawRubber )
1267 p.setRasterOp( NotROP );
1268 p.setPen( TQPen( black, 0, DotLine ) );
1269 p.translate( -diffx(), -diffy() );
1270 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1273 m_rubber = m_rubber.normalize();
1274 if ( m_zoomRubberDraw )
1276 m_view->setZoomRect( m_rubber );
1282 m_zoomRubberDraw =
false;
1286 drawContour =
false;
1287 if ( !m_rotateObject )
1289 if ( m_angleBeforeRotate != m_rotateObject->getAngle() ) {
1290 TQPtrList<KPrObject> objects;
1291 objects.append( m_rotateObject );
1296 float newAngle = m_rotateObject->getAngle();
1297 m_rotateObject->rotate( m_angleBeforeRotate );
1299 KPrRotateCmd *rotateCmd =
new KPrRotateCmd( i18n(
"Change Rotation" ), newAngle,
1300 objects, m_view->kPresenterDoc() );
1301 m_view->kPresenterDoc()->addCommand( rotateCmd );
1303 m_rotateObject->rotate( newAngle );
1304 m_rotateObject = NULL;
1308 if ( m_startPoint != m_endPoint )
1311 m_endPoint = m_startPoint;
1315 if ( !m_insertRect.isNull() )
1321 if ( !m_insertRect.isNull() )
1327 if ( !m_insertRect.isNull() )
1336 if ( !m_insertRect.isNull() )
1338 KPrPartObject *kpPartObject =
insertObject( m_insertRect );
1339 setToolEditMode( TEM_MOUSE );
1343 kpPartObject->activate( m_view );
1344 m_editObject = kpPartObject;
1349 if ( !m_insertRect.isNull() )
1353 setToolEditMode( TEM_MOUSE );
1356 if ( !m_pointArray.isNull() )
1358 insertFreehand( m_pointArray );
1362 if ( !m_pointArray.isNull() )
1363 insertPolygon( m_pointArray );
1368 setToolEditMode( TEM_MOUSE );
1370 case INS_CLOSED_FREEHAND: {
1371 if ( !m_pointArray.isNull() )
1372 insertClosedLine( m_pointArray );
1377 m_gl.repaintAfterSnapping();
1379 emit objectSelectedChanged();
1381 if ( toolEditMode != TEM_MOUSE && editMode )
1384 m_view->disableAutoScroll();
1385 mousePressed =
false;
1387 m_insertRect = KoRect();
1388 mouseMoveEvent( e );
1391void KPrCanvas::mouseMoveEvent( TQMouseEvent *e )
1393 if ( editMode && m_view->kPresenterDoc()->showGuideLines() && toolEditMode == TEM_MOUSE && m_gl.mouseMoveEvent( e ) )
1396 TQPoint contentsPoint( e->pos().x()+diffx(), e->pos().y()+diffy() );
1397 KoPoint docPoint = m_view->zoomHandler()->unzoomPoint( contentsPoint );
1398 if(m_currentTextObjectView)
1400 if (m_currentTextObjectView->isLinkVariable(e->pos()) )
1402 setCursor(TQt::PointingHandCursor);
1405 setCursor( arrowCursor );
1407 KPrTextObject *txtObj=m_currentTextObjectView->kpTextObject();
1409 if(txtObj->contains( docPoint )&&mousePressed)
1411 KoPoint pos = docPoint - txtObj->innerRect().topLeft();
1412 m_currentTextObjectView->mouseMoveEvent( e, m_view->zoomHandler()->ptToLayoutUnitPix( pos ) );
1417 if (m_view->kPresenterDoc()->getVariableCollection()->variableSetting()->displayLink())
1419 KPrObject *tmp_kpobject =
getObjectAt( docPoint );
1420 if(tmp_kpobject && tmp_kpobject->getType() == OT_TEXT)
1422 KPrTextObject *kptextobject =
static_cast<KPrTextObject*
>( tmp_kpobject );
1423 TQPoint iPoint = kptextobject->viewToInternal( e->pos(), this );
1424 KoLinkVariable* linkVar =
dynamic_cast<KoLinkVariable *
>( kptextobject->textObject()->variableAtPoint( iPoint ) );
1428 setCursor(TQt::PointingHandCursor);
1434 m_disableSnapping = e->state() & ShiftButton;
1437 m_view->setRulerMousePos( e->x(), e->y() );
1439 if ( toolEditMode == TEM_ROTATE )
1441 setCursor( KPrUtils::rotateCursor() );
1442 if ( !mousePressed )
1445 KPrObject *kpobject;
1446 if ( ( !mousePressed || ( !drawRubber && modType == MT_NONE ) ) &&
1447 toolEditMode == TEM_MOUSE )
1449 bool cursorAlreadySet =
false;
1450 if ( (
int)objectList().count() > 0 )
1452 kpobject = m_activePage->getCursor( docPoint );
1455 setCursor( kpobject->getCursor( docPoint, modType, m_view->kPresenterDoc() ) );
1457 cursorAlreadySet =
true;
1461 if ( !cursorAlreadySet )
1462 setCursor( arrowCursor );
1465 }
else if ( mousePressed ) {
1466 switch ( toolEditMode ) {
1469 if ( modType == MT_NONE ) {
1474 p.setRasterOp( NotROP );
1475 p.setPen( TQPen( black, 0, DotLine ) );
1476 p.translate( -diffx(), -diffy() );
1477 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1478 m_rubber.setRight( docPoint.x() );
1479 m_rubber.setBottom( docPoint.y() );
1480 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1483 }
else if ( modType == MT_MOVE ) {
1486 m_moveSnapDiff= KoPoint(0,0);
1487 m_moveStartPoint =
objectRect(
false ).topLeft();
1490 moveObjectsByMouse( docPoint, e->state() & AltButton || e->state() & ControlButton );
1491 }
else if ( modType != MT_NONE && m_resizeObject ) {
1492 if ( !m_isResizing )
1494 m_isResizing =
true;
1497 KoPoint sp( snapPoint( docPoint,
false ) );
1499 bool keepRatio = m_resizeObject->isKeepRatio();
1500 if ( e->state() & AltButton )
1504 bool scaleAroundCenter =
false;
1505 if ( e->state() & ControlButton )
1507 scaleAroundCenter =
true;
1510 resizeObject( modType, sp, keepRatio, scaleAroundCenter );
1517 p.setRasterOp( NotROP );
1518 p.setPen( TQPen( black, 0, DotLine ) );
1519 p.translate( -diffx(), -diffy() );
1520 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1521 m_rubber.setRight( docPoint.x() );
1522 m_rubber.setBottom( docPoint.y() );
1523 p.drawRect( m_view->zoomHandler()->zoomRect( m_rubber ) );
1525 m_zoomRubberDraw =
true;
1529 if ( m_rotateObject )
1533 double angle = KoPoint::getAngle( m_rotateCenter, docPoint );
1535 double angle1 = KoPoint::getAngle( m_rotateCenter, m_rotateStart );
1538 angle += m_angleBeforeRotate;
1541 else if ( angle > 360 )
1544 m_rotateObject->rotate( angle );
1545 _repaint( m_rotateObject );
1557 TQPainter p(
this );
1558 p.setPen( TQPen( black, 1, SolidLine ) );
1559 p.setBrush( NoBrush );
1560 p.setRasterOp( NotROP );
1561 p.translate( -diffx(), -diffy() );
1563 KoPoint sp( snapPoint( docPoint ) );
1564 p.drawRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
1565 updateInsertRect( sp, e->state() );
1566 p.drawRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
1570 mouseSelectedObject =
true;
1573 TQPainter p(
this );
1574 p.setPen( TQPen( black, 1, SolidLine ) );
1575 p.setBrush( NoBrush );
1576 p.setRasterOp( NotROP );
1577 p.translate( -diffx(), -diffy() );
1579 KoPoint sp( snapPoint( docPoint ) );
1580 p.drawEllipse( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
1581 updateInsertRect( sp, e->state() );
1582 p.drawEllipse( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ) );
1586 mouseSelectedObject =
true;
1589 TQPainter p(
this );
1590 p.setPen( TQPen( black, 1, SolidLine ) );
1591 p.setBrush( NoBrush );
1592 p.setRasterOp( NotROP );
1593 p.translate( -diffx(), -diffy() );
1595 KoPoint sp( snapPoint( docPoint ) );
1596 p.drawRoundRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ), m_view->getRndX(), m_view->getRndY() );
1597 updateInsertRect( sp, e->state() );
1598 p.drawRoundRect( m_view->zoomHandler()->zoomRect( m_insertRect.normalize() ), m_view->getRndX(), m_view->getRndY() );
1602 mouseSelectedObject =
true;
1605 TQPainter p(
this );
1606 p.setPen( TQPen( black, 1, SolidLine ) );
1607 p.setBrush( NoBrush );
1608 p.setRasterOp( NotROP );
1609 p.translate( -diffx(), -diffy() );
1611 KoPoint oldEndPoint( m_endPoint );
1612 m_endPoint = snapPoint( docPoint );
1614 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1615 m_view->zoomHandler()->zoomPoint( oldEndPoint ) );
1617 if ( e->state() & AltButton )
1619 m_startPoint += m_endPoint - oldEndPoint;
1623 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1624 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
1627 mouseSelectedObject =
true;
1630 TQPainter p(
this );
1631 p.setPen( TQPen( black, 1, SolidLine ) );
1632 p.setBrush( NoBrush );
1633 p.setRasterOp( NotROP );
1634 p.translate( -diffx(), -diffy() );
1636 KoPoint sp( snapPoint( docPoint ) );
1637 drawPieObject( &p, m_insertRect );
1638 updateInsertRect( sp, e->state() );
1639 drawPieObject( &p, m_insertRect );
1643 mouseSelectedObject =
true;
1646 case INS_CLOSED_FREEHAND:
1648 m_endPoint = snapPoint( docPoint );
1649 if ( m_endPoint != m_startPoint )
1651 TQPainter p(
this );
1652 p.setPen( TQPen( black, 1, SolidLine ) );
1653 p.setBrush( NoBrush );
1654 p.setRasterOp( NotROP );
1655 p.translate( -diffx(), -diffy() );
1657 if ( e->state() & AltButton )
1659 TQPointArray pointArray = m_pointArray.zoomPointArray( m_view->zoomHandler() );
1661 p.drawPolyline( pointArray );
1662 m_pointArray.translate( m_endPoint.x() - m_startPoint.x(),
1663 m_endPoint.y() - m_startPoint.y() );
1664 pointArray = m_pointArray.zoomPointArray( m_view->zoomHandler() );
1666 p.drawPolyline( pointArray );
1670 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1671 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
1675 m_pointArray.putPoints( m_indexPointArray, 1, m_endPoint.x(), m_endPoint.y() );
1676 ++m_indexPointArray;
1677 m_startPoint = m_endPoint;
1680 mouseSelectedObject =
true;
1682 case INS_POLYLINE:
case INS_CLOSED_POLYLINE: {
1683 TQPainter p(
this );
1684 p.setPen( TQPen( black, 1, SolidLine ) );
1685 p.setBrush( NoBrush );
1686 p.setRasterOp( NotROP );
1687 p.translate( -diffx(), -diffy() );
1689 KoPoint oldEndPoint( m_endPoint );
1690 m_endPoint = snapPoint( docPoint );
1692 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1693 m_view->zoomHandler()->zoomPoint( oldEndPoint ) );
1695 if ( e->state() & AltButton )
1697 TQPointArray pointArray = m_pointArray.zoomPointArray( m_view->zoomHandler() );
1699 p.drawPolyline( pointArray );
1700 m_pointArray.translate( m_endPoint.x() - oldEndPoint.x(),
1701 m_endPoint.y() - oldEndPoint.y() );
1702 pointArray = m_pointArray.zoomPointArray( m_view->zoomHandler() );
1704 p.drawPolyline( pointArray );
1705 m_startPoint += m_endPoint - oldEndPoint;
1709 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
1710 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
1713 mouseSelectedObject =
true;
1715 case INS_CUBICBEZIERCURVE:
case INS_QUADRICBEZIERCURVE:
1716 case INS_CLOSED_CUBICBEZIERCURVE:
case INS_CLOSED_QUADRICBEZIERCURVE:{
1717 TQPainter p(
this );
1718 p.setPen( TQPen( black, 1, SolidLine ) );
1719 p.setBrush( NoBrush );
1720 p.setRasterOp( NotROP );
1721 p.translate( -diffx(), -diffy() );
1723 KoPoint newEndPoint( snapPoint( docPoint ) );
1727 if ( e->state() & AltButton )
1732 KoPoint diff( newEndPoint - m_endPoint );
1733 m_pointArray.translate( diff.x(), diff.y() );
1734 m_endPoint = newEndPoint;
1735 m_startPoint += diff;
1742 m_endPoint = newEndPoint;
1745 KoPointArray points;
1746 if ( !m_drawLineWithCubicBezierCurve )
1748 double _firstX = m_pointArray.at( m_indexPointArray - 2 ).x();
1749 double _firstY = m_pointArray.at( m_indexPointArray - 2 ).y();
1751 double _fourthX = m_pointArray.at( m_indexPointArray - 1 ).x();
1752 double _fourthY = m_pointArray.at( m_indexPointArray - 1 ).y();
1754 double _midpointX = (_firstX + _fourthX ) / 2;
1755 double _midpointY = (_firstY + _fourthY ) / 2;
1756 double _diffX = _fourthX - _midpointX;
1757 double _diffY = _fourthY - _midpointY;
1759 double _secondX = m_endPoint.x() - _diffX;
1760 double _secondY = m_endPoint.y() - _diffY;
1761 m_CubicBezierSecondPoint = KoPoint( _secondX, _secondY );
1763 m_symmetricEndPoint = m_startPoint * 2 - m_endPoint;
1765 double _thirdX = m_symmetricEndPoint.x() - _diffX;
1766 double _thirdY = m_symmetricEndPoint.y() - _diffY;
1767 m_CubicBezierThirdPoint = KoPoint( _thirdX, _thirdY );
1769 if ( toolEditMode == INS_QUADRICBEZIERCURVE || toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE ) {
1772 m_CubicBezierSecondPoint = KoPoint( _secondX, _secondY );
1774 points.putPoints( 0, 4, _firstX,_firstY, _secondX,_secondY, _thirdX,_thirdY, _fourthX,_fourthY );
1778 if ( points.size() > 0 )
1780 m_oldCubicBezierPointArray = points;
1783 mouseSelectedObject =
true;
1786 TQPainter p(
this );
1787 p.setPen( TQPen( black, 1, SolidLine ) );
1788 p.setBrush( NoBrush );
1789 p.setRasterOp( NotROP );
1790 p.translate( -diffx(), -diffy() );
1792 KoPoint sp( snapPoint( docPoint ) );
1794 drawPolygon( p, m_insertRect );
1795 updateInsertRect( sp, e->state() );
1797 drawPolygon( p, m_insertRect );
1799 mouseSelectedObject =
true;
1804 }
else if ( !editMode && m_drawMode && m_drawLineInDrawMode ) {
1807 p.setPen( m_view->kPresenterDoc()->presPen() );
1808 p.drawLine( m_drawModeLines[m_drawModeLines.count() - 1].point( m_drawModeLineIndex - 1 ), e->pos() );
1810 m_drawModeLines[m_drawModeLines.count() - 1].putPoints( m_drawModeLineIndex++, 1, e->x(), e->y() );
1813 if ( !editMode && !m_drawMode && !m_presMenu->isVisible() && fillBlack )
1814 setCursor( blankCursor );
1817void KPrCanvas::mouseDoubleClickEvent( TQMouseEvent *e )
1819 if(!m_view->koDocument()->isReadWrite())
1821 TQPoint contentsPoint( e->pos().x()+diffx(), e->pos().y()+diffy() );
1822 KoPoint docPoint = m_view->zoomHandler()->unzoomPoint( contentsPoint );
1823 if(m_currentTextObjectView)
1825 KPrTextObject *txtObj=m_currentTextObjectView->kpTextObject();
1827 if(txtObj->contains( docPoint ))
1829 KoPoint pos = docPoint - txtObj->getOrig();
1831 m_currentTextObjectView->mouseDoubleClickEvent( e, m_view->zoomHandler()->ptToLayoutUnitPix( pos ) );
1837 if ( !m_activePage->getPageRect().contains(docPoint))
1841 if ( ( toolEditMode == INS_POLYLINE || toolEditMode == INS_CLOSED_POLYLINE ) && !m_pointArray.isNull() && m_drawPolyline )
1843 m_startPoint = snapPoint( docPoint );
1845 m_pointArray.putPoints( m_indexPointArray, 1, m_startPoint.x(), m_startPoint.y() );
1846 ++m_indexPointArray;
1849 mouseMoveEvent( e );
1854 if ( toolEditMode != TEM_MOUSE || !editMode )
return;
1859 if ( kpobject->getType() == OT_TEXT )
1862 KPrTextObject *kptextobject =
dynamic_cast<KPrTextObject*
>( kpobject );
1863 if(kptextobject && (!kptextobject->isProtectContent() || kptextobject->isProtectContent()
1864 && m_view->kPresenterDoc()->cursorInProtectedArea()))
1866 if(m_currentTextObjectView)
1868 m_currentTextObjectView->terminate();
1869 delete m_currentTextObjectView;
1871 m_currentTextObjectView=kptextobject->createKPTextView(
this);
1874 setCursor( arrowCursor );
1875 m_editObject = kpobject;
1878 else if ( kpobject->getType() == OT_PART )
1881 KPrPartObject * obj=
dynamic_cast<KPrPartObject *
>(kpobject);
1884 obj->activate( m_view );
1889 getView()->extraProperties();
1893void KPrCanvas::drawPieObject( TQPainter *p,
const KoRect & rect )
1895 TQRect pRect( m_view->zoomHandler()->zoomRect( rect ) );
1896 switch ( m_view->getPieType() ) {
1898 p->drawPie( pRect.x(), pRect.y(), pRect.width() - 2,
1899 pRect.height() - 2, m_view->getPieAngle(), m_view->getPieLength() );
1902 p->drawArc( pRect.x(), pRect.y(), pRect.width() - 2,
1903 pRect.height() - 2, m_view->getPieAngle(), m_view->getPieLength() );
1906 p->drawChord( pRect.x(), pRect.y(), pRect.width() - 2,
1907 pRect.height() - 2, m_view->getPieAngle(), m_view->getPieLength() );
1914void KPrCanvas::wheelEvent( TQWheelEvent *e )
1916 if ( !editMode && !m_drawMode ) {
1917 if ( e->delta() == -120 )
1918 m_view->screenNext();
1919 else if ( e->delta() == 120 )
1920 m_view->screenPrev();
1923 else if ( editMode )
1924 emit sigMouseWheelEvent( e );
1927void KPrCanvas::keyPressEvent( TQKeyEvent *e )
1929 if ( editMode && m_view->kPresenterDoc()->showGuideLines() && m_gl.keyPressEvent( e ) )
1932 switch ( e->key() ) {
1933 case TQt::Key_Space:
case Key_Right:
case Key_Down:
1934 setSwitchingMode(
false );
1935 m_view->screenNext();
1938 setSwitchingMode(
false );
1939 m_view->screenNext(
true );
1941 case TQt::Key_Backspace:
case Key_Left:
case Key_Up:
1942 setSwitchingMode(
false );
1944 finishPageEffect(
true );
1945 m_view->screenPrev();
1947 case TQt::Key_Prior:
1948 setSwitchingMode(
false );
1950 finishPageEffect(
true );
1951 m_view->screenPrev(
true );
1953 case TQt::Key_Escape:
case Key_Q:
case Key_X:
1954 setSwitchingMode(
false );
1956 finishPageEffect(
true );
1957 m_view->screenStop();
1961 if ( !spManualSwitch() )
1962 m_view->stopAutoPresTimer();
1966 setSwitchingMode(
false );
1968 if ( !spManualSwitch() ) {
1969 m_view->setAutoPresTimer( 1 );
1970 m_setPageTimer =
true;
1974 setSwitchingMode(
false );
1975 if ( m_presentationSlidesIterator != m_presentationSlides.end() ) {
1976 gotoPage( *(--m_presentationSlides.end()) );
1977 if ( !spManualSwitch() ) {
1978 m_view->setAutoPresTimer( 1 );
1979 m_setPageTimer =
true;
1985 }
else if ( m_editObject ) {
1986 if ( e->key() == TQt::Key_Escape ) {
1989 else if ( m_currentTextObjectView )
1991 if ( !m_currentTextObjectView->kpTextObject()->isProtectContent() || (e->text().length() == 0))
1992 m_currentTextObjectView->keyPressEvent( e );
1994 KMessageBox::information(
this, i18n(
"Read-only content cannot be changed. No modifications will be accepted."));
2004 case TQt::Key_Prior:
2008 m_view->screenFirst();
2011 m_view->screenLast();
2017 if ( mouseSelectedObject )
2019 m_disableSnapping = e->state() & ShiftButton;
2024 if ( e->state() & ControlButton )
2026 offsetx = TQMAX(1,m_view->zoomHandler()->zoomItX(10));
2027 offsety = TQMAX(1,m_view->zoomHandler()->zoomItY(10));
2030 if ( !m_keyPressEvent )
2032 m_moveStartPosKey =
objectRect(
false ).topLeft();
2037 m_keyPressEvent =
true;
2038 moveObjectsByKey( 0, -offsety );
2041 m_keyPressEvent =
true;
2042 moveObjectsByKey( 0, offsety );
2044 case TQt::Key_Right:
2045 m_keyPressEvent =
true;
2046 moveObjectsByKey( offsetx, 0 );
2049 m_keyPressEvent =
true;
2050 moveObjectsByKey( -offsetx, 0 );
2052 case TQt::Key_Delete:
2054 m_view->editDelete();
2056 case TQt::Key_Escape:
2058 if ( mousePressed && toolEditMode == TEM_MOUSE )
2071 TQRect oldBoundingRect = m_view->zoomHandler()->zoomRect( m_resizeObject->getRepaintRect() );
2072 m_resizeObject->setOrig( m_rectBeforeResize.topLeft() );
2073 m_resizeObject->setSize( m_rectBeforeResize.size() );
2074 drawContour =
false;
2075 m_view->kPresenterDoc()->repaint( oldBoundingRect );
2076 m_view->kPresenterDoc()->repaint( m_resizeObject );
2079 m_isResizing =
false;
2080 m_view->disableAutoScroll();
2081 mousePressed =
false;
2089 drawContour =
false;
2090 KoPoint move( m_moveStartPoint -
objectRect(
false ).topLeft() );
2091 m_activePage->moveObject( m_view, move,
false );
2092 m_view->disableAutoScroll();
2093 mousePressed =
false;
2104 setToolEditMode( TEM_MOUSE );
2107 case TQt::Key_Shift:
2109 bool oldChangeSnap = m_disableSnapping;
2110 m_disableSnapping = e->key() == TQt::Key_Shift;
2111 if ( !oldChangeSnap && m_disableSnapping )
2113 m_gl.repaintAfterSnapping();
2116 if ( e->state() & TQt::LeftButton && m_isMoving )
2118 moveObjectsByMouse( m_origMousePos, e->state() & AltButton || e->state() & ControlButton );
2127 switch ( e->key() ) {
2129 m_view->getVScrollBar()->addLine();
2132 m_view->getVScrollBar()->subtractLine();
2134 case TQt::Key_Right:
2135 m_view->getHScrollBar()->addLine();
2138 m_view->getHScrollBar()->subtractLine();
2143 case TQt::Key_Backtab:
2146 case TQt::Key_Escape:
2147 if ( toolEditMode == TEM_ZOOM )
2148 setToolEditMode( TEM_MOUSE );
2156void KPrCanvas::keyReleaseEvent( TQKeyEvent *e )
2158 if ( editMode && m_currentTextObjectView )
2159 m_currentTextObjectView->keyReleaseEvent( e );
2162 if ( mouseSelectedObject )
2164 if(e->key()==TQt::Key_Up || e->key()==Key_Down || e->key()==Key_Right || e->key()==Key_Left)
2166 if ( !e->isAutoRepeat() )
2168 KoPoint move(
objectRect(
false ).topLeft() - m_moveStartPosKey);
2169 KCommand *cmd=m_activePage->moveObject(m_view, move.x(), move.y());
2171 m_view->kPresenterDoc()->addCommand( cmd );
2172 m_keyPressEvent =
false;
2174 emit objectSelectedChanged();
2180void KPrCanvas::imStartEvent( TQIMEvent * e )
2182 if ( m_editObject && m_currentTextObjectView )
2184 if ( !m_currentTextObjectView->kpTextObject()->isProtectContent() )
2185 m_currentTextObjectView->imStartEvent( e );
2187 KMessageBox::information(
this, i18n(
"Read-only content cannot be changed. No modifications will be accepted."));
2191void KPrCanvas::imComposeEvent( TQIMEvent * e )
2193 if ( m_editObject && m_currentTextObjectView )
2195 if ( !m_currentTextObjectView->kpTextObject()->isProtectContent() )
2196 m_currentTextObjectView->imComposeEvent( e );
2200void KPrCanvas::imEndEvent( TQIMEvent * e )
2202 if ( m_editObject && m_currentTextObjectView )
2204 if ( !m_currentTextObjectView->kpTextObject()->isProtectContent() )
2205 m_currentTextObjectView->imEndEvent( e );
2209void KPrCanvas::resizeEvent( TQResizeEvent *e )
2213 TQWidget::resizeEvent( e );
2216 TQWidget::resizeEvent(
new TQResizeEvent( TDEGlobalSettings::desktopGeometry(
this).size(),
2218 buffer.resize( size() );
2221bool KPrCanvas::close(
bool alsoDelete )
2225 return TQWidget::close(alsoDelete);
2229 m_view->screenStop();
2236 KPrObject *
object = m_activePage->getObjectAt( pos, withoutProtected );
2237 if ( objectIsAHeaderFooterHidden(
object ) )
2243void KPrCanvas::selectObj( KPrObject *kpobject )
2245 kpobject->setSelected(
true );
2246 _repaint( kpobject );
2247 emit objectSelectedChanged();
2249 mouseSelectedObject =
true;
2252void KPrCanvas::deSelectObj( KPrObject *kpobject )
2254 kpobject->setSelected(
false );
2255 _repaint( kpobject );
2257 if ( !m_activePage->isOneObjectSelected() )
2259 mouseSelectedObject =
false;
2261 emit objectSelectedChanged();
2264void KPrCanvas::selectAllObj()
2266 TQPtrListIterator<KPrObject> it( m_activePage->objectList() );
2267 for ( ; it.current() ; ++it )
2269 if ( !objectIsAHeaderFooterHidden(it.current()) )
2270 it.current()->setSelected(
true );
2273 mouseSelectedObject =
true;
2275 emit objectSelectedChanged();
2279void KPrCanvas::deSelectAllObj()
2281 if( m_activePage->numSelected() == 0 )
2286 m_activePage->deSelectAllObj();
2289 if(m_currentTextObjectView)
2291 m_currentTextObjectView->terminate();
2292 m_currentTextObjectView->kpTextObject()->setEditingTextObj(
false );
2293 delete m_currentTextObjectView;
2294 m_currentTextObjectView=0L;
2296 mouseSelectedObject =
false;
2297 emit objectSelectedChanged();
2300void KPrCanvas::setMouseSelectedObject(
bool b)
2302 mouseSelectedObject = b;
2303 emit objectSelectedChanged();
2309 m_presMenu =
new TDEPopupMenu();
2310 TQ_CHECK_PTR( m_presMenu );
2311 m_presMenu->setCheckable(
true );
2312 m_presMenu->insertTitle( i18n(
"Slide Show" ) );
2313 m_presMenu->insertItem( i18n(
"&Continue" ),
this, TQ_SLOT( setSwitchingMode() ) );
2314 PM_DM = m_presMenu->insertItem( i18n(
"&Drawing Mode" ),
this, TQ_SLOT( setDrawingMode() ) );
2315 m_presMenu->insertSeparator();
2316 m_presMenu->insertItem( SmallIcon(
"goto"), i18n(
"&Goto Slide..." ),
this, TQ_SLOT( slotGotoPage() ) );
2317 m_presMenu->insertSeparator();
2318 m_presMenu->insertItem( i18n(
"&End" ),
this, TQ_SLOT( slotExitPres() ) );
2319 m_presMenu->setItemChecked( PM_DM,
false );
2320 m_presMenu->setMouseTracking(
true );
2323void KPrCanvas::clipCut()
2325 if ( m_currentTextObjectView )
2326 m_currentTextObjectView->cut();
2330void KPrCanvas::clipCopy()
2332 if ( m_currentTextObjectView )
2333 m_currentTextObjectView->copy();
2337void KPrCanvas::clipPaste()
2339 if ( m_currentTextObjectView )
2340 m_currentTextObjectView->paste();
2341 m_view->editPaste();
2344void KPrCanvas::chPic()
2346 m_activePage->chPic( m_view );
2352 const KURL& _fileURL,
2357 const TQCursor oldCursor( cursor() );
2358 setCursor( waitCursor );
2359 TQPixmap pix( nWidth, nHeight );
2361 if( !pix.isNull() ){
2368 const TQSize desiredSize(nWidth, nHeight);
2369 if( desiredSize != pix.size() )
2370 pix.resize( desiredSize );
2372 KURL fileURL(_fileURL);
2373 if( fileURL.protocol().isEmpty() )
2374 fileURL.setProtocol(
"file" );
2375 const bool bLocalFile = fileURL.isLocalFile();
2376 KTempFile* tmpFile = bLocalFile ? NULL :
new KTempFile();
2378 tmpFile->setAutoDelete(
true );
2379 if( bLocalFile || 0 == tmpFile->status() ){
2380 TQFile file( bLocalFile ? fileURL.path(0) : tmpFile->name() );
2381 if ( file.open( IO_ReadWrite ) ) {
2382 res = pix.save( &file, format, quality );
2387 res = TDEIO::NetAccess::upload( tmpFile->name(), fileURL,
this );
2395 setCursor( oldCursor );
2399void KPrCanvas::savePicture()
2401 m_activePage->savePicture( m_view );
2404void KPrCanvas::setTextFormat(
const KoTextFormat &format,
int flags)
2407 if ( lst.isEmpty() )
return;
2408 KMacroCommand* macroCmd =
new KMacroCommand( i18n(
"Change Text Font") );
2409 TQPtrListIterator<KoTextFormatInterface> it( lst );
2410 for ( ; it.current() ; ++it ) {
2411 KCommand *cmd = it.current()->setFormatCommand(&format, flags,
true);
2414 macroCmd->addCommand( cmd );
2416 m_view->kPresenterDoc()->addCommand( macroCmd );
2419void KPrCanvas::setTextColor(
const TQColor &color )
2422 if ( lst.isEmpty() )
return;
2423 TQPtrListIterator<KoTextFormatInterface> it( lst );
2424 KMacroCommand* macroCmd =
new KMacroCommand( i18n(
"Set Text Color") );
2425 for ( ; it.current() ; ++it ) {
2426 KCommand* cmd = it.current()->setTextColorCommand( color );
2428 macroCmd->addCommand( cmd );
2430 m_view->kPresenterDoc()->addCommand( macroCmd );
2433void KPrCanvas::setTextBackgroundColor(
const TQColor &color )
2436 if ( lst.isEmpty() )
return;
2437 TQPtrListIterator<KoTextFormatInterface> it( lst );
2438 KMacroCommand* macroCmd = 0L;
2439 for ( ; it.current() ; ++it ) {
2440 KCommand* cmd = it.current()->setTextBackgroundColorCommand( color );
2444 macroCmd =
new KMacroCommand( i18n(
"Set Text Background Color") );
2445 macroCmd->addCommand( cmd );
2449 m_view->kPresenterDoc()->addCommand( macroCmd );
2452void KPrCanvas::setTextBold(
bool b )
2455 if ( lst.isEmpty() )
return;
2456 TQPtrListIterator<KoTextFormatInterface> it( lst );
2457 KMacroCommand* macroCmd = 0L;
2458 for ( ; it.current() ; ++it ) {
2459 KCommand* cmd = it.current()->setBoldCommand( b );
2463 macroCmd =
new KMacroCommand( i18n(
"Make Text Bold") );
2464 macroCmd->addCommand( cmd );
2468 m_view->kPresenterDoc()->addCommand( macroCmd );
2471void KPrCanvas::setTextItalic(
bool b )
2474 if ( lst.isEmpty() )
return;
2475 TQPtrListIterator<KoTextFormatInterface> it( lst );
2476 KMacroCommand* macroCmd = 0L;
2477 for ( ; it.current() ; ++it ) {
2478 KCommand* cmd = it.current()->setItalicCommand( b );
2482 macroCmd =
new KMacroCommand( i18n(
"Make Text Italic") );
2483 macroCmd->addCommand( cmd );
2487 m_view->kPresenterDoc()->addCommand( macroCmd );
2490void KPrCanvas::setTextUnderline(
bool b )
2493 if ( lst.isEmpty() )
return;
2494 TQPtrListIterator<KoTextFormatInterface> it( lst );
2495 KMacroCommand* macroCmd = 0L;
2496 for ( ; it.current() ; ++it ) {
2497 KCommand* cmd = it.current()->setUnderlineCommand( b );
2501 macroCmd =
new KMacroCommand( i18n(
"Underline Text") );
2502 macroCmd->addCommand( cmd );
2506 m_view->kPresenterDoc()->addCommand( macroCmd );
2509void KPrCanvas::setTextStrikeOut(
bool b )
2512 if ( lst.isEmpty() )
return;
2513 KMacroCommand* macroCmd = 0L;
2514 TQPtrListIterator<KoTextFormatInterface> it( lst );
2515 for ( ; it.current() ; ++it ) {
2516 KCommand *cmd = it.current()->setStrikeOutCommand( b );
2520 macroCmd =
new KMacroCommand( i18n(
"Make Text Italic") );
2521 macroCmd->addCommand( cmd );
2525 m_view->kPresenterDoc()->addCommand( macroCmd );
2528void KPrCanvas::setTextFamily(
const TQString &f )
2531 if ( lst.isEmpty() )
return;
2532 KMacroCommand* macroCmd = 0L;
2533 TQPtrListIterator<KoTextFormatInterface> it( lst );
2534 for ( ; it.current() ; ++it ) {
2535 KCommand* cmd = it.current()->setFamilyCommand( f );
2539 macroCmd =
new KMacroCommand( i18n(
"Set Text Font") );
2540 macroCmd->addCommand( cmd );
2544 m_view->kPresenterDoc()->addCommand( macroCmd );
2547void KPrCanvas::setTextPointSize(
int s )
2550 if ( lst.isEmpty() )
return;
2551 KMacroCommand* macroCmd = 0L;
2552 TQPtrListIterator<KoTextFormatInterface> it( lst );
2553 for ( ; it.current() ; ++it ) {
2554 KCommand* cmd = it.current()->setPointSizeCommand( s );
2558 macroCmd =
new KMacroCommand( i18n(
"Change Text Size") );
2559 macroCmd->addCommand( cmd );
2564 m_view->kPresenterDoc()->addCommand( macroCmd );
2567void KPrCanvas::setTextSubScript(
bool b )
2570 if ( lst.isEmpty() )
return;
2571 TQPtrListIterator<KoTextFormatInterface> it( lst );
2572 KMacroCommand* macroCmd = 0L;
2573 for ( ; it.current() ; ++it ) {
2574 KCommand* cmd = it.current()->setTextSubScriptCommand( b );
2578 macroCmd =
new KMacroCommand( i18n(
"Set Text Subscript") );
2579 macroCmd->addCommand( cmd );
2583 m_view->kPresenterDoc()->addCommand( macroCmd );
2586void KPrCanvas::setTextSuperScript(
bool b )
2589 if ( lst.isEmpty() )
return;
2590 TQPtrListIterator<KoTextFormatInterface> it( lst );
2591 KMacroCommand* macroCmd = 0L;
2592 for ( ; it.current() ; ++it ) {
2593 KCommand* cmd = it.current()->setTextSuperScriptCommand( b );
2597 macroCmd =
new KMacroCommand( i18n(
"Set Text Superscript") );
2598 macroCmd->addCommand( cmd );
2602 m_view->kPresenterDoc()->addCommand( macroCmd );
2605void KPrCanvas::setTextDefaultFormat( )
2608 if ( lst.isEmpty() )
return;
2609 TQPtrListIterator<KoTextFormatInterface> it( lst );
2610 KMacroCommand* macroCmd = 0L;
2611 for ( ; it.current() ; ++it ) {
2612 KCommand* cmd = it.current()->setDefaultFormatCommand( );
2616 macroCmd =
new KMacroCommand( i18n(
"Apply Default Format") );
2617 macroCmd->addCommand( cmd );
2621 m_view->kPresenterDoc()->addCommand( macroCmd );
2624void KPrCanvas::setIncreaseFontSize()
2627 if ( lst.isEmpty() )
return;
2628 TQPtrListIterator<KoTextFormatInterface> it( lst );
2629 int size = it.current()->currentFormat()->pointSize();
2630 KMacroCommand* macroCmd =0L;
2631 for ( ; it.current() ; ++it ) {
2632 KCommand* cmd = it.current()->setPointSizeCommand( size+1 );
2636 macroCmd =
new KMacroCommand( i18n(
"Increase Font Size") );
2637 macroCmd->addCommand( cmd );
2641 m_view->kPresenterDoc()->addCommand( macroCmd );
2644void KPrCanvas::setDecreaseFontSize()
2647 if ( lst.isEmpty() )
return;
2648 TQPtrListIterator<KoTextFormatInterface> it( lst );
2649 int size = it.current()->currentFormat()->pointSize();
2650 KMacroCommand* macroCmd = 0L;
2651 for ( ; it.current() ; ++it ) {
2652 KCommand* cmd = it.current()->setPointSizeCommand( size-1 );
2656 macroCmd =
new KMacroCommand( i18n(
"Decrease Font Size") );
2657 macroCmd->addCommand( cmd );
2661 m_view->kPresenterDoc()->addCommand( macroCmd );
2664void KPrCanvas::setTextAlign(
int align )
2667 if ( lst.isEmpty() )
return;
2668 TQPtrListIterator<KoTextFormatInterface> it( lst );
2669 KMacroCommand* macroCmd = 0L;
2670 for ( ; it.current() ; ++it ) {
2671 KCommand* cmd = it.current()->setAlignCommand(align);
2675 macroCmd =
new KMacroCommand( i18n(
"Set Text Align") );
2676 macroCmd->addCommand( cmd );
2680 m_view->kPresenterDoc()->addCommand( macroCmd );
2683void KPrCanvas::setTabList(
const KoTabulatorList & tabList )
2686 if ( lst.isEmpty() )
return;
2687 TQPtrListIterator<KoTextFormatInterface> it( lst );
2688 KMacroCommand* macroCmd = 0L;
2689 for ( ; it.current() ; ++it ) {
2690 KCommand* cmd = it.current()->setTabListCommand(tabList );
2694 macroCmd =
new KMacroCommand( i18n(
"Change Tabulators") );
2695 macroCmd->addCommand( cmd );
2699 m_view->kPresenterDoc()->addCommand( macroCmd );
2702void KPrCanvas::setTextDepthPlus()
2705 if ( lst.isEmpty() )
return;
2706 double leftMargin=0.0;
2708 leftMargin=lst.first()->currentParagLayoutFormat()->margins[TQStyleSheetItem::MarginLeft];
2709 double indent = m_view->kPresenterDoc()->getIndentValue();
2710 double newVal = leftMargin + indent;
2711 TQPtrListIterator<KoTextFormatInterface> it( lst );
2712 KMacroCommand* macroCmd = 0L;
2713 for ( ; it.current() ; ++it ) {
2714 KCommand* cmd = it.current()->setMarginCommand(TQStyleSheetItem::MarginLeft, newVal);
2718 macroCmd =
new KMacroCommand( i18n(
"Increase Paragraph Depth") );
2719 macroCmd->addCommand( cmd );
2723 m_view->kPresenterDoc()->addCommand( macroCmd );
2726 const KoParagLayout *layout=lst.first()->currentParagLayoutFormat();
2727 m_view->showRulerIndent( layout->margins[TQStyleSheetItem::MarginLeft], layout->margins[TQStyleSheetItem::MarginFirstLine],
2728 layout->margins[TQStyleSheetItem::MarginRight], lst.first()->rtl());
2732void KPrCanvas::setTextDepthMinus()
2735 if ( lst.isEmpty() )
return;
2736 double leftMargin=0.0;
2738 leftMargin=lst.first()->currentParagLayoutFormat()->margins[TQStyleSheetItem::MarginLeft];
2739 double indent = m_view->kPresenterDoc()->getIndentValue();
2740 TQPtrListIterator<KoTextFormatInterface> it( lst );
2741 double newVal = leftMargin - indent;
2742 KMacroCommand* macroCmd = 0L;
2743 for ( ; it.current() ; ++it ) {
2744 KCommand* cmd = it.current()->setMarginCommand(TQStyleSheetItem::MarginLeft, TQMAX( newVal, 0 ));
2748 macroCmd =
new KMacroCommand( i18n(
"Decrease Paragraph Depth") );
2749 macroCmd->addCommand( cmd );
2753 m_view->kPresenterDoc()->addCommand( macroCmd );
2756 const KoParagLayout *layout=lst.first()->currentParagLayoutFormat();
2757 m_view->showRulerIndent( layout->margins[TQStyleSheetItem::MarginLeft], layout->margins[TQStyleSheetItem::MarginFirstLine],
2758 layout->margins[TQStyleSheetItem::MarginRight], lst.first()->rtl());
2762void KPrCanvas::setNewFirstIndent(
double _firstIndent)
2765 if ( lst.isEmpty() )
return;
2766 TQPtrListIterator<KoTextFormatInterface> it( lst );
2767 KMacroCommand* macroCmd = 0L;
2768 for ( ; it.current() ; ++it ) {
2769 KCommand* cmd = it.current()->setMarginCommand(TQStyleSheetItem::MarginFirstLine, _firstIndent);
2773 macroCmd =
new KMacroCommand( i18n(
"Change First Line Indent") );
2774 macroCmd->addCommand( cmd );
2778 m_view->kPresenterDoc()->addCommand( macroCmd );
2781void KPrCanvas::setNewLeftIndent(
double _leftIndent)
2784 if ( lst.isEmpty() )
return;
2785 TQPtrListIterator<KoTextFormatInterface> it( lst );
2786 KMacroCommand* macroCmd = 0L;
2787 for ( ; it.current() ; ++it ) {
2788 KCommand* cmd = it.current()->setMarginCommand(TQStyleSheetItem::MarginLeft, _leftIndent);
2792 macroCmd =
new KMacroCommand( i18n(
"Change Left Indent") );
2793 macroCmd->addCommand( cmd );
2797 m_view->kPresenterDoc()->addCommand( macroCmd );
2800void KPrCanvas::setNewRightIndent(
double _rightIndent)
2803 if ( lst.isEmpty() )
return;
2804 TQPtrListIterator<KoTextFormatInterface> it( lst );
2805 KMacroCommand* macroCmd = 0L;
2806 for ( ; it.current() ; ++it ) {
2807 KCommand* cmd = it.current()->setMarginCommand(TQStyleSheetItem::MarginRight, _rightIndent);
2811 macroCmd =
new KMacroCommand( i18n(
"Change Right Indent") );
2812 macroCmd->addCommand( cmd );
2816 m_view->kPresenterDoc()->addCommand( macroCmd );
2839void KPrCanvas::printRTDebug(
int info )
2841 KPrTextObject *kpTxtObj = 0;
2842 if ( m_currentTextObjectView )
2843 kpTxtObj = m_currentTextObjectView->kpTextObject();
2847 kpTxtObj->textObject()->printRTDebug( info );
2851bool KPrCanvas::haveASelectedPartObj()
const
2853 return m_activePage->haveASelectedPartObj();
2856bool KPrCanvas::haveASelectedGroupObj()
const
2858 return m_activePage->haveASelectedGroupObj();
2861bool KPrCanvas::haveASelectedPixmapObj()
const
2863 return m_activePage->haveASelectedPixmapObj();
2868 TQPtrList<KPrTextObject> lst;
2870 if ( m_currentTextObjectView )
2871 lst.append( m_currentTextObjectView->kpTextObject() );
2879 TQPtrList<KoTextFormatInterface> lst;
2880 TQPtrList<KPrObject> lstObj;
2882 if ( m_currentTextObjectView )
2884 if ( !m_currentTextObjectView->kpTextObject()->isProtectContent())
2885 lst.append( m_currentTextObjectView );
2889 m_activePage->getAllObjectSelectedList(lstObj);
2890 TQPtrListIterator<KPrObject> it(lstObj);
2891 for ( ; it.current(); ++it ) {
2892 if ( it.current()->getType() == OT_TEXT )
2894 KPrTextObject * obj =
static_cast<KPrTextObject*
>( it.current() );
2895 if ( !obj->isProtectContent() )
2896 lst.append( obj->textObject() );
2905 TQPtrList<KPrTextObject> lst;
2906 TQPtrListIterator<KPrObject> it(getObjectList());
2907 for ( ; it.current(); ++it ) {
2908 if ( it.current()->isSelected() && it.current()->getType() == OT_TEXT )
2909 lst.append(
static_cast<KPrTextObject*
>( it.current() ) );
2919 m_presMenu->setItemChecked( PM_DM,
false );
2921 setCursor( waitCursor );
2925 KPrDocument * doc = m_view->kPresenterDoc();
2929 double zoom = kMin( zoomX, zoomY );
2931 kdDebug() <<
"zoomX=" << zoomX <<
" zoomY=" << zoomY <<
" zoom=" << zoom << endl;
2933 m_zoomBeforePresentation = doc->zoomHandler()->zoom();
2934 kdDebug() <<
"old zoomed resolutions =" << doc->zoomHandler()->zoomedResolutionX() <<
"," << doc->zoomHandler()->zoomedResolutionY() << endl;
2939 doc->zoomHandler()->setZoomAndResolution( tqRound( zoom * m_zoomBeforePresentation ),
2940 KoGlobal::dpiX(), KoGlobal::dpiY() );
2942 doc->newZoomAndResolution(
false,
false );
2945 m_presentationSlides.clear();
2946 TQValueList<int> selected = doc->displaySelectedSlides();
2947 for ( TQValueList<int>::Iterator it = selected.begin() ; it != selected.end(); ++ it )
2951 int slideno = *it + 1;
2952 m_presentationSlides.append( slideno );
2956 if( !m_presentationSlides.count() )
2959 stopScreenPresentation();
2965 for(
unsigned i = 0; i<m_presentationSlides.count(); i++ )
2966 if( m_presentationSlides[i] >= curPgNum )
2968 slide = m_presentationSlides[i];
2972 setCursor( blankCursor );
2974 m_step.m_pageNumber = (
unsigned int) -1;
2979void KPrCanvas::stopScreenPresentation()
2982 setCursor( waitCursor );
2984 KPrDocument * doc = m_view->kPresenterDoc();
2985 doc->zoomHandler()->setZoomAndResolution( m_zoomBeforePresentation,
2986 KoGlobal::dpiX(), KoGlobal::dpiY() );
2987 doc->newZoomAndResolution(
false,
false);
2989 m_step.m_pageNumber = 0;
2993 setToolEditMode( toolEditMode );
2994 setWFlags( WResizeNoErase );
3003 KPrDocument * doc = m_view->kPresenterDoc();
3005 if ( !gotoNextPage )
3007 if ( finishPageEffect() )
3011 m_drawModeLines.clear();
3017 TQPtrListIterator<KPrObject> oit( doc->pageList().at( m_step.m_pageNumber )->objectList() );
3018 for (
int i = 0 ; oit.current(); ++oit, ++i )
3020 KPrObject *kpobject = oit.current();
3021 if ( kpobject->getAppearStep() ==
static_cast<int>( m_step.m_step )
3022 && kpobject->getType() == OT_TEXT && kpobject->getEffect2() != EF2_NONE )
3024 if (
static_cast<int>( m_step.m_subStep + 1 ) < kpobject->getSubPresSteps() )
3035 if ( m_step.m_step < *( --m_pageEffectSteps.end() ) )
3037 TQValueList<int>::ConstIterator it = m_pageEffectSteps.find( m_step.m_step );
3038 m_step.m_step = *( ++it );
3039 m_step.m_subStep = 0;
3043 if ( m_step.m_step == 0 )
3048 TQRect( 0, 0, kapp->desktop()->width(), kapp->desktop()->height() ),
3049 doc->pageList().at( m_step.m_pageNumber ) );
3061 if ( objectEffectFinished )
3066 TQValueList<int>::ConstIterator test( m_presentationSlidesIterator );
3067 if ( ++test != m_presentationSlides.end() )
3069 if ( !spManualSwitch() && m_setPageTimer )
3072 m_view->setAutoPresTimer( doc->pageList().at( (*m_presentationSlidesIterator) - 1 )->getPageTimer() / 1 );
3073 m_setPageTimer =
false;
3076 m_setPageTimer =
true;
3078 TQRect desk = TDEGlobalSettings::desktopGeometry(
this);
3079 TQPixmap _pix1( desk.width(), desk.height() );
3080 drawCurrentPageInPix( _pix1 );
3082 m_view->setPageDuration( m_step.m_pageNumber );
3084 m_step.m_pageNumber = *( ++m_presentationSlidesIterator ) - 1;
3085 m_step.m_subStep = 0;
3087 m_pageEffectSteps = doc->getPageEffectSteps( m_step.m_pageNumber );
3088 m_step.m_step = *m_pageEffectSteps.begin();
3090 TQPixmap _pix2( desk.width(), desk.height() );
3091 drawCurrentPageInPix( _pix2 );
3093 TQValueList<int>::ConstIterator it( m_presentationSlidesIterator );
3096 KPrPage * page = doc->pageList().at( ( *it ) - 1 );
3097 PageEffect _pageEffect = page->getPageEffect();
3099 bool _soundEffect = page->getPageSoundEffect();
3100 TQString _soundFileName = page->getPageSoundFileName();
3102 if ( _soundEffect && !_soundFileName.isEmpty() ) {
3104 playSound( _soundFileName );
3110 m_pageEffect =
new KPrPageEffects(
this, _pix2, _pageEffect, page->getPageEffectSpeed() );
3111 if ( m_pageEffect->doEffect() )
3113 delete m_pageEffect;
3120 connect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotDoPageEffect() ) );
3121 m_pageEffectTimer.start( 50,
true );
3131 if ( ( spManualSwitch() || !spInfiniteLoop() ) && !showingLastSlide && spShowEndOfPresentationSlide() )
3133 m_view->setPageDuration( m_step.m_pageNumber );
3135 TQRect desk = TDEGlobalSettings::desktopGeometry(
this);
3136 TQPixmap lastSlide( desk.width(), desk.height() );
3137 TQFont font( m_view->kPresenterDoc()->defaultFont().family() );
3138 TQPainter p( &lastSlide );
3142 p.fillRect( p.viewport(), black );
3143 p.drawText( 50, 50, i18n(
"End of presentation. Click to exit." ) );
3144 bitBlt(
this, 0, 0, &lastSlide, 0, 0, lastSlide.width(), lastSlide.height() );
3145 showingLastSlide =
true;
3148 else if ( showingLastSlide || !spShowEndOfPresentationSlide() )
3150 showingLastSlide =
false;
3151 m_view->screenStop();
3155 m_view->setPageDuration( m_step.m_pageNumber );
3157 m_view->setAutoPresTimer( 1 );
3166 m_step.m_subStep = 0;
3169 m_drawModeLines.clear();
3171 if ( !gotoPreviousPage && m_step.m_step > *m_pageEffectSteps.begin() ) {
3172 TQValueList<int>::ConstIterator it = m_pageEffectSteps.find( m_step.m_step );
3173 m_step.m_step = *( --it );
3175 m_step.m_subStep = 1000;
3180 if ( m_presentationSlidesIterator == m_presentationSlides.begin() ) {
3181 m_pageEffectSteps = m_view->kPresenterDoc()->getPageEffectSteps( m_step.m_pageNumber );
3182 m_step.m_step = *m_pageEffectSteps.begin();
3187 m_view->setPageDuration( m_step.m_pageNumber );
3189 m_step.m_pageNumber = *( --m_presentationSlidesIterator ) - 1;
3191 KPrDocument * doc = m_view->kPresenterDoc();
3193 m_pageEffectSteps = doc->getPageEffectSteps( m_step.m_pageNumber );
3195 if ( gotoPreviousPage )
3197 m_step.m_step = *( m_pageEffectSteps.begin() );
3203 m_step.m_step = *( --m_pageEffectSteps.end() );
3213bool KPrCanvas::canAssignEffect( TQPtrList<KPrObject> &objs )
const
3215 TQPtrListIterator<KPrObject> oIt( m_activePage->objectList() );
3216 for (; oIt.current(); ++oIt )
3219 if(m_view->kPresenterDoc()->isHeaderFooter(oIt.current()))
3221 if ( oIt.current()->isSelected() )
3222 objs.append( oIt.current() );
3224 return !objs.isEmpty();
3227bool KPrCanvas::isOneObjectSelected()
const
3229 return m_activePage->isOneObjectSelected();
3239 bool forceRealVariableValue,
3245 KPrDocument *doc = m_view->kPresenterDoc();
3246 int oldZoom = doc->zoomHandler()->zoom();
3247 bool oldDisplayFieldValue =
false;
3249 if( 0 < forceWidth || 0 < forceHeight )
3251 const TQRect rect( doc->getPageRect(
true ) );
3252 const double dRectHeight =
static_cast<double>(rect.height());
3253 const double dRectWidth =
static_cast<double>(rect.width());
3254 double dForceHeight =
static_cast<double>(forceHeight);
3255 double dForceWidth =
static_cast<double>(forceWidth);
3258 if( 0 >= forceWidth )
3259 dForceWidth = dForceHeight * dRectWidth / dRectHeight;
3260 else if( 0 >= forceHeight )
3261 dForceHeight = dForceWidth * dRectHeight / dRectWidth;
3265 doc->zoomHandler()->setResolution( dForceWidth / dRectWidth,
3266 dForceHeight / dRectHeight );
3269 doc->newZoomAndResolution(
false,
false );
3271 m_view->zoomDocument(zoom);
3274 if ( forceRealVariableValue )
3276 oldDisplayFieldValue = m_view->kPresenterDoc()->getVariableCollection()->variableSetting()->displayFieldCode();
3277 if ( oldDisplayFieldValue )
3279 m_view->kPresenterDoc()->getVariableCollection()->variableSetting()->setDisplayFieldCode(
false);
3280 m_view->kPresenterDoc()->recalcVariables( VT_ALL );
3284 KPrPage * page = m_view->kPresenterDoc()->pageList().at(pgnum);
3285 TQRect rect = page->getZoomPageRect( );
3286 _pix.resize( rect.size() );
3287 _pix.fill( TQt::white );
3292 bool _editMode = editMode;
3298 if ( page->masterPage() && page->displayObjectFromMasterPage() )
3304 editMode = _editMode;
3307 if ( forceRealVariableValue )
3309 if ( oldDisplayFieldValue )
3311 m_view->kPresenterDoc()->getVariableCollection()->variableSetting()->setDisplayFieldCode(
true);
3312 m_view->kPresenterDoc()->recalcVariables( VT_ALL );
3316 m_view->zoomDocument(oldZoom);
3321void KPrCanvas::drawCurrentPageInPix( TQPixmap &_pix )
const
3326 _pix.fill(TQt::black);
3331 drawBackground( &p, _pix.rect(), m_view->kPresenterDoc()->pageList().at( m_step.m_pageNumber ) );
3332 PresStep step( m_step.m_pageNumber, m_step.m_step, m_step.m_subStep,
true,
true );
3341 KPrDocument *doc = m_view->kPresenterDoc();
3342 KPrPage* page = doc->pageList().at( step.m_pageNumber );
3343 TQRect
const rect = page->getZoomPageRect();
3344 bool const drawBorder = printer->option(
"kde-kpresenter-printslideborders").toInt() && rows>1 && cols>1;
3346 int height = rect.height();
3347 int width = rect.width();
3349 TQPaintDeviceMetrics metrics( printer );
3350 int begin_left = ( metrics.width() - rect.width() );
3351 int begin_top = ( metrics.height() - rect.height() );
3353 rows = cols = TQMAX( rows, cols );
3357 height = ( ( height - 80 ) / rows ) - 20;
3362 width = (width -5) / cols;
3365 int top = begin_top;
3366 int left = begin_left;
3367 for (
int r = 0; r < rows; r++ )
3369 for (
int c = 0; c < cols; c++ )
3371 page = doc->pageList().at( step.m_pageNumber );
3374 painter->setViewport( TQRect(left, top, width, height) );
3378 painter->drawRect( rect );
3379 step.m_pageNumber++;
3390 if ( m_effectHandler )
3392 m_effectTimer.stop();
3393 TQObject::disconnect( &m_effectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoEffect() ) );
3395 m_effectHandler->finish();
3396 delete m_effectHandler;
3397 m_effectHandler = 0;
3400 TQPixmap screen_orig( kapp->desktop()->width(), kapp->desktop()->height() );
3402 KPrPage *page = m_view->kPresenterDoc()->pageList().at( m_step.m_pageNumber );
3404 if ( m_step.m_subStep == 0 && !isAllreadyPainted && isUpdatesEnabled() )
3408 p.begin( &screen_orig );
3409 TQRect desktopRect = TQRect( 0, 0, kapp->desktop()->width(), kapp->desktop()->height() );
3411 PresStep step( m_step.m_pageNumber, m_step.m_step, m_step.m_subStep,
true,
true );
3414 bitBlt(
this, 0, 0, &screen_orig );
3418 bitBlt( &screen_orig, 0, 0,
this );
3421 TQPtrList<KPrObject> allObjects;
3423 if ( page->displayObjectFromMasterPage() )
3425 TQPtrListIterator<KPrObject> it( page->masterPage()->objectList() );
3426 for ( ; it.current(); ++it ) {
3427 if ( objectIsAHeaderFooterHidden( it.current() ) )
3430 allObjects.append( it.current() );
3434 TQPtrListIterator<KPrObject> it( page->objectList() );
3435 for ( ; it.current(); ++it )
3437 allObjects.append( it.current() );
3441 m_effectHandler =
new KPrEffectHandler( m_step, goingBack,
this, &screen_orig, allObjects, m_view, 1 );
3442 if ( m_effectHandler->doEffect() )
3444 delete m_effectHandler;
3445 m_effectHandler = 0;
3449 connect( &m_effectTimer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotDoEffect() ) );
3450 m_effectTimer.start( 50,
true );
3455void KPrCanvas::slotDoEffect()
3457 if ( m_effectHandler->doEffect() )
3459 m_effectTimer.stop();
3460 TQObject::disconnect( &m_effectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoEffect() ) );
3461 delete m_effectHandler;
3462 m_effectHandler = 0;
3466 m_effectTimer.start( 50,
true );
3471void KPrCanvas::slotDoPageEffect()
3473 if ( m_pageEffect->doEffect() )
3475 m_pageEffectTimer.stop();
3476 TQObject::disconnect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoPageEffect() ) );
3477 delete m_pageEffect;
3484 m_pageEffectTimer.start( 50,
true );
3488void KPrCanvas::slotAutoScroll(
const TQPoint &scrollDistance)
3491 TQPoint d = scrollDistance;
3492 m_view->getHScrollBar()->setValue( m_view->getHScrollBar()->value() + d.x() );
3493 m_view->getVScrollBar()->setValue( m_view->getVScrollBar()->value() + d.y() );
3499 bool finished =
false;
3500 if ( m_effectHandler )
3502 m_effectTimer.stop();
3503 TQObject::disconnect( &m_effectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoEffect() ) );
3504 m_effectHandler->finish();
3505 delete m_effectHandler;
3506 m_effectHandler = 0;
3513bool KPrCanvas::finishPageEffect(
bool cancel )
3515 bool finished =
false;
3518 m_pageEffectTimer.stop();
3519 TQObject::disconnect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoPageEffect() ) );
3521 m_pageEffect->finish();
3522 delete m_pageEffect;
3529 else if ( !spManualSwitch() )
3531 m_view->setAutoPresTimer( 1 );
3532 m_setPageTimer =
true;
3541void KPrCanvas::print( TQPainter *painter, KPrinter *printer,
float ,
float )
3548 kapp->processEvents();
3559 TQProgressDialog progress( i18n(
"Printing..." ), i18n(
"Cancel" ),
3560 printer->pageList().count() + 2,
this );
3563 progress.setProgress( 0 );
3568 if ( !printer->previewOnly() )
3570 rows = printer->option(
"kde-kpresenter-printrows").toInt();
3571 cols = printer->option(
"kde-kpresenter-printcolumns").toInt();
3573 int const slides_per_page = rows * cols;
3578 int current_slide = 0;
3579 TQValueList<int> list=printer->pageList();
3580 TQValueList<int>::iterator it;
3581 for( it=list.begin();it!=list.end();++it)
3584 progress.setProgress( ++j );
3585 kapp->processEvents();
3587 if ( progress.wasCancelled() )
3590 step.m_pageNumber = i - 1;
3592 if ( step.m_pageNumber != current_slide )
3595 if ( !list.isEmpty() && i > list.first() )
3598 painter->resetXForm();
3599 painter->fillRect( m_view->kPresenterDoc()->pageList().at( m_step.m_pageNumber )->getZoomPageRect(), white );
3601 printPage( painter, step, printer, rows, cols );
3602 kapp->processEvents();
3604 painter->resetXForm();
3605 kapp->processEvents();
3607 current_slide += slides_per_page;
3613 TDEConfig *config=KPrFactory::global()->config();
3614 config->setGroup(
"Misc");
3615 bool printNotes = config->readBoolEntry(
"PrintNotes",
true);
3617 KPrNoteBar *noteBar = m_view->getNoteBar();
3619 if ( noteBar && !noteBar->getNotesTextForPrinting(list).isEmpty()
3620 && !progress.wasCancelled() && printNotes )
3623 painter->resetXForm();
3624 noteBar->printNotes( painter, printer, list );
3625 painter->resetXForm();
3628 setToolEditMode( toolEditMode );
3632 progress.setProgress( printer->pageList().count() + 2 );
3640void KPrCanvas::updateInsertRect(
const KoPoint &point, TQt::ButtonState state )
3642 if ( state & AltButton )
3644 m_insertRect.moveBottomRight( point );
3648 m_insertRect.setRight( point.x() );
3649 m_insertRect.setBottom( point.y() );
3656 KPrTextObject* obj = m_activePage->insertTextObject( rect );
3663 KoRect rect( startPoint, endPoint );
3664 bool rev = rect.width() < 0 || rect.height() < 0;
3665 rect = rect.normalize();
3666 LineType lt = LT_LU_RD;
3667 if ( startPoint.x() == endPoint.x() )
3670 rect.setLeft( rect.left() - 5.0 );
3671 rect.setRight( rect.right() + 5.0 );
3673 else if ( startPoint.y() == endPoint.y() )
3676 rect.setTop( startPoint.y() - 5.0 );
3677 rect.setBottom( startPoint.y() + 5.0 );
3679 else if ( ( startPoint.x() < endPoint.x() && startPoint.y() > endPoint.y() ) ||
3680 ( startPoint.x() > endPoint.x() && startPoint.y() < endPoint.y() ) )
3684 m_activePage->insertLine( rect, m_view->getPen(),
3685 !rev ? m_view->getLineBegin() : m_view->getLineEnd(), !rev ? m_view->getLineEnd() : m_view->getLineBegin(),
3692 m_activePage->insertRectangle( rect, m_view->getPen(), m_view->getBrush(), m_view->getFillType(),
3693 m_view->getGColor1(), m_view->getGColor2(), m_view->getGType(), m_view->getRndX(), m_view->getRndY(),
3694 m_view->getGUnbalanced(), m_view->getGXFactor(), m_view->getGYFactor() );
3699 m_activePage->insertCircleOrEllipse( rect, m_view->getPen(), m_view->getBrush(), m_view->getFillType(),
3700 m_view->getGColor1(), m_view->getGColor2(),
3701 m_view->getGType(), m_view->getGUnbalanced(), m_view->getGXFactor(), m_view->getGYFactor() );
3706 m_activePage->insertPie( rect, m_view->getPen(), m_view->getBrush(), m_view->getFillType(),
3707 m_view->getGColor1(), m_view->getGColor2(), m_view->getGType(),
3708 m_view->getPieType(), m_view->getPieAngle(), m_view->getPieLength(),
3709 m_view->getLineBegin(), m_view->getLineEnd(), m_view->getGUnbalanced(), m_view->getGXFactor(),
3710 m_view->getGYFactor() );
3715 m_activePage->insertAutoform( rect, m_view->getPen(), m_view->getBrush(),
3716 m_view->getLineBegin(), m_view->getLineEnd(),
3717 m_view->getFillType(), m_view->getGColor1(), m_view->getGColor2(), m_view->getGType(),
3718 autoform, m_view->getGUnbalanced(), m_view->getGXFactor(), m_view->getGYFactor() );
3723 KPrPartObject *kpPartObject = m_activePage->insertObject( rect, partEntry );
3724 return kpPartObject;
3727void KPrCanvas::insertFreehand(
const KoPointArray &_pointArray )
3729 KoRect rect = _pointArray.boundingRect();
3731 m_activePage->insertFreehand( getObjectPoints( _pointArray ), rect, m_view->getPen(), m_view->getLineBegin(),
3732 m_view->getLineEnd() );
3734 m_pointArray = KoPointArray();
3735 m_indexPointArray = 0;
3738void KPrCanvas::insertPolyline(
const KoPointArray &_pointArray )
3740 if( _pointArray.count()> 1)
3742 KoRect rect = _pointArray.boundingRect();
3743 m_activePage->insertPolyline( getObjectPoints( _pointArray ), rect, m_view->getPen(), m_view->getLineBegin(),
3744 m_view->getLineEnd() );
3746 m_pointArray = KoPointArray();
3747 m_indexPointArray = 0;
3750void KPrCanvas::insertCubicBezierCurve(
const KoPointArray &_pointArray )
3752 if ( _pointArray.count() > 1 )
3754 KoPointArray points( _pointArray );
3755 KoPointArray bezierPoints( KPrBezierCurveObject::bezier2polyline( _pointArray ) );
3756 KoRect rect = bezierPoints.boundingRect();
3757 points = getObjectPoints( points );
3758 bezierPoints = getObjectPoints( bezierPoints );
3760 if ( toolEditMode == INS_CUBICBEZIERCURVE )
3762 m_activePage->insertCubicBezierCurve( points, bezierPoints, rect, m_view->getPen(),
3763 m_view->getLineBegin(), m_view->getLineEnd() );
3765 else if ( toolEditMode == INS_QUADRICBEZIERCURVE )
3767 m_activePage->insertQuadricBezierCurve( points, bezierPoints, rect, m_view->getPen(),
3768 m_view->getLineBegin(), m_view->getLineEnd() );
3770 else if ( toolEditMode == INS_CLOSED_CUBICBEZIERCURVE ||
3771 toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE )
3773 m_activePage->insertClosedLine( bezierPoints, rect, m_view->getPen(), m_view->getBrush(),
3774 m_view->getFillType(), m_view->getGColor1(), m_view->getGColor2(),
3775 m_view->getGType(), m_view->getGUnbalanced(),
3776 m_view->getGXFactor(), m_view->getGYFactor(), toolEditMode );
3779 m_pointArray = KoPointArray();
3780 m_indexPointArray = 0;
3783void KPrCanvas::insertPolygon(
const KoPointArray &_pointArray )
3785 KoRect rect = _pointArray.boundingRect();
3787 m_activePage->insertPolygon( getObjectPoints( _pointArray ), rect, m_view->getPen(), m_view->getBrush(), m_view->getFillType(),
3788 m_view->getGColor1(), m_view->getGColor2(), m_view->getGType(), m_view->getGUnbalanced(),
3789 m_view->getGXFactor(), m_view->getGYFactor(),
3790 m_view->getCheckConcavePolygon(), m_view->getCornersValue(), m_view->getSharpnessValue() );
3792 m_pointArray = KoPointArray();
3793 m_indexPointArray = 0;
3798 TQString file = m_activePage->insPictureFile();
3800 TQCursor c = cursor();
3801 setCursor( waitCursor );
3802 if ( !file.isEmpty() ) {
3803 if ( rect.width() > 10 && rect.height() > 10 )
3805 m_activePage->insertPicture( file, rect );
3809 KoPoint tl( rect.topLeft() );
3810 m_activePage->insertPicture( file, tl );
3812 m_activePage->setInsPictureFile( TQString() );
3817void KPrCanvas::insertClosedLine(
const KoPointArray &_pointArray )
3819 KoRect rect = _pointArray.boundingRect();
3821 m_activePage->insertClosedLine( getObjectPoints( _pointArray ), rect, m_view->getPen(), m_view->getBrush(), m_view->getFillType(),
3822 m_view->getGColor1(), m_view->getGColor2(), m_view->getGType(), m_view->getGUnbalanced(),
3823 m_view->getGXFactor(), m_view->getGYFactor(), toolEditMode );
3825 m_pointArray = KoPointArray();
3826 m_indexPointArray = 0;
3829void KPrCanvas::setToolEditMode( ToolEditMode _m,
bool updateView )
3832 if ( ( toolEditMode == INS_POLYLINE || toolEditMode == INS_CLOSED_POLYLINE ) && !m_pointArray.isNull())
3835 if ( ( toolEditMode == INS_CUBICBEZIERCURVE || toolEditMode == INS_QUADRICBEZIERCURVE
3836 || toolEditMode == INS_CLOSED_CUBICBEZIERCURVE || toolEditMode == INS_CLOSED_QUADRICBEZIERCURVE ) && !m_pointArray.isNull() )
3837 endDrawCubicBezierCurve();
3842 if ( toolEditMode == TEM_MOUSE )
3844 setCursor( arrowCursor );
3845 TQPoint pos = TQCursor::pos();
3847 KoPoint docPoint( m_view->zoomHandler()->unzoomPoint( pos ) );
3848 KPrObject *obj=m_activePage->getCursor( pos);
3850 setCursor( obj->getCursor( docPoint, modType, m_view->kPresenterDoc() ) );
3852 else if ( toolEditMode == INS_FREEHAND || toolEditMode == INS_CLOSED_FREEHAND )
3853 setCursor( KPrUtils::penCursor() );
3854 else if ( toolEditMode == TEM_ROTATE )
3855 setCursor( KPrUtils::rotateCursor() );
3857 setCursor( crossCursor );
3860 m_view->setTool( toolEditMode );
3864void KPrCanvas::endDrawPolyline()
3866 m_drawPolyline =
false;
3868 if ( toolEditMode == INS_POLYLINE )
3869 insertPolyline( m_pointArray );
3870 else if ( toolEditMode == INS_CLOSED_POLYLINE )
3871 insertClosedLine( m_pointArray );
3873 emit objectSelectedChanged();
3874 if ( toolEditMode != TEM_MOUSE && editMode )
3876 m_view->disableAutoScroll();
3877 mousePressed =
false;
3881void KPrCanvas::endDrawCubicBezierCurve()
3883 m_drawCubicBezierCurve =
false;
3884 m_oldCubicBezierPointArray = KoPointArray();
3885 insertCubicBezierCurve( m_pointArray );
3886 emit objectSelectedChanged();
3887 if ( toolEditMode != TEM_MOUSE && editMode )
3889 m_view->disableAutoScroll();
3890 mousePressed =
false;
3894void KPrCanvas::selectNext()
3896 if ( objectList().count() == 0 )
return;
3898 if ( m_activePage->numSelected() == 0 )
3899 objectList().at( 0 )->setSelected(
true );
3901 int i = objectList().findRef( m_activePage->getSelectedObj() );
3902 if ( i <
static_cast<int>( objectList().count() ) - 1 ) {
3903 m_view->kPresenterDoc()->deSelectAllObj();
3904 objectList().at( ++i )->setSelected(
true );
3906 m_view->kPresenterDoc()->deSelectAllObj();
3907 objectList().at( 0 )->setSelected(
true );
3910 m_view->showObjectRect( m_activePage->getSelectedObj() );
3914void KPrCanvas::selectPrev()
3916 if ( objectList().count() == 0 )
return;
3917 if ( m_activePage->numSelected() == 0 )
3918 objectList().at( objectList().count() - 1 )->setSelected(
true );
3920 int i = objectList().findRef( m_activePage->getSelectedObj() );
3922 m_view->kPresenterDoc()->deSelectAllObj();
3923 objectList().at( --i )->setSelected(
true );
3925 m_view->kPresenterDoc()->deSelectAllObj();
3926 objectList().at( objectList().count() - 1 )->setSelected(
true );
3929 m_view->showObjectRect( m_activePage->getSelectedObj() );
3933void KPrCanvas::dragEnterEvent( TQDragEnterEvent *e )
3935 if ( m_currentTextObjectView )
3936 m_currentTextObjectView->dragEnterEvent( e );
3937 else if ( TQTextDrag::canDecode( e )
3938 || TQImageDrag::canDecode( e )
3939 || KURLDrag::canDecode(e)) {
3946void KPrCanvas::dragMoveEvent( TQDragMoveEvent *e )
3948 if( m_currentTextObjectView)
3950 KPrTextObject * obj = textUnderMouse( e->pos());
3951 bool emitChanged =
false;
3953 emitChanged = checkCurrentTextEdit( obj );
3954 if ( m_currentTextObjectView )
3956 m_currentTextObjectView->dragMoveEvent( e, TQPoint() );
3961 else if ( TQTextDrag::canDecode( e )
3962 || TQImageDrag::canDecode( e )
3963 || KURLDrag::canDecode(e)) {
3970void KPrCanvas::dropImage( TQMimeSource * data,
bool resizeImageToOriginalSize,
int posX,
int posY )
3972 setToolEditMode( TEM_MOUSE );
3976 TQImageDrag::decode( data, pix );
3979 tmpFile.setAutoDelete(
true);
3981 if( tmpFile.status() != 0 )
3984 pix.save( tmpFile.name(),
"PNG" );
3985 TQCursor c = cursor();
3986 setCursor( waitCursor );
3988 TQPoint pos( posX + diffx(), posY + diffy() );
3989 KoPoint docPoint( m_view->zoomHandler()->unzoomPoint( pos ) );
3991 m_activePage->insertPicture( tmpFile.name(), docPoint );
3995 if ( resizeImageToOriginalSize )
3996 picViewOriginalSize();
4000void KPrCanvas::dropEvent( TQDropEvent *e )
4003 KoPoint docPoint = m_view->zoomHandler()->unzoomPoint( e->pos()+TQPoint(diffx(),diffy()) );
4004 if ( !m_activePage->getZoomPageRect().contains(e->pos()))
4007 if ( TQImageDrag::canDecode( e ) ) {
4008 dropImage( e,
true, e->pos().x(), e->pos().y() );
4010 }
else if ( KURLDrag::canDecode( e ) ) {
4011 setToolEditMode( TEM_MOUSE );
4015 KURLDrag::decode( e, lst );
4017 KURL::List::ConstIterator it = lst.begin();
4018 for ( ; it != lst.end(); ++it ) {
4019 const KURL &url( *it );
4022 if ( !url.isLocalFile() ) {
4023 if ( !TDEIO::NetAccess::download( url, filename,
this ) )
4026 filename = url.path();
4029 KMimeMagicResult *res = KMimeMagic::self()->findFileType( filename );
4031 if ( res && res->isValid() ) {
4032 TQString mimetype = res->mimeType();
4033 if ( mimetype.contains(
"image" ) ) {
4034 TQCursor c = cursor();
4035 setCursor( waitCursor );
4036 m_activePage->insertPicture( filename, docPoint );
4038 }
else if ( mimetype.contains(
"text" ) ) {
4039 TQCursor c = cursor();
4040 setCursor( waitCursor );
4041 TQFile f( filename );
4042 TQTextStream t( &f );
4043 TQString text = TQString(), tmp;
4044 kdDebug()<<
" filename :"<<filename<<endl;
4045 if ( f.open( IO_ReadOnly ) ) {
4046 while ( !t.eof() ) {
4053 kdDebug()<<
" text :"<<endl;
4054 m_activePage->insertTextObject( m_view->zoomHandler()->unzoomRect(TQRect( e->pos().x(), e->pos().y(), 250, 250 )),
4060 TDEIO::NetAccess::removeTempFile( filename );
4063 else if (m_currentTextObjectView)
4065 m_currentTextObjectView->dropEvent( e );
4067 else if ( TQTextDrag::canDecode( e ) ) {
4068 setToolEditMode( TEM_MOUSE );
4072 TQTextDrag::decode( e, text );
4074 m_activePage->insertTextObject( m_view->zoomHandler()->unzoomRect( TQRect( e->pos().x(), e->pos().y(), 250, 250 )),
4082void KPrCanvas::slotGotoPage()
4084 setSwitchingMode(
false );
4086 int pg = m_step.m_pageNumber + 1;
4088 m_view->setPageDuration( m_step.m_pageNumber );
4090 pg = KPrGotoPage::gotoPage( m_view->kPresenterDoc(), m_presentationSlides, pg,
this );
4093 if ( !spManualSwitch() ) {
4094 m_view->setAutoPresTimer( 1 );
4095 m_setPageTimer =
true;
4099void KPrCanvas::gotoPage(
int pg )
4102 if ( page != m_step.m_pageNumber || m_step.m_step != *m_pageEffectSteps.begin() || m_step.m_subStep != 0 ) {
4104 m_drawModeLines.clear();
4107 m_step.m_pageNumber = page;
4108 kdDebug(33001) <<
"Page::gotoPage m_step.m_pageNumber =" << m_step.m_pageNumber << endl;
4109 m_presentationSlidesIterator = m_presentationSlides.find( m_step.m_pageNumber + 1 );
4112 m_pageEffectSteps = m_view->kPresenterDoc()->getPageEffectSteps( m_step.m_pageNumber );
4113 m_step.m_step = *m_pageEffectSteps.begin();
4114 m_step.m_subStep = 0;
4116 TQRect desk = TDEGlobalSettings::desktopGeometry(
this);
4117 resize( desk.width(), desk.height() );
4121 m_view->refreshPageButton();
4127 gotoPage( *m_presentationSlides.begin() );
4130KPrTextObject* KPrCanvas::kpTxtObj()
const
4132 return ( ( m_editObject && m_editObject->getType() == OT_TEXT ) ?
4133 dynamic_cast<KPrTextObject*
>( m_editObject ) : 0 );
4137void KPrCanvas::copyOasisObjs()
4140 KoStoreDrag *kd =
new KoStoreDrag(
"application/vnd.oasis.opendocument.presentation", 0L );
4141 TQDragObject* dragObject = kd;
4143 TQBuffer buffer(arr);
4144 KoStore* store = KoStore::createStore( &buffer, KoStore::Write,
"application/vnd.oasis.opendocument.presentation" );
4147 kd->setEncodedData( arr );
4148 TQApplication::clipboard()->setData( dragObject, TQClipboard::Clipboard );
4151void KPrCanvas::copyObjs()
4153 TQDomDocument doc(
"DOC");
4154 TQDomElement presenter=doc.createElement(
"DOC");
4155 presenter.setAttribute(
"editor",
"KPresenter");
4156 presenter.setAttribute(
"mime",
"application/x-kpresenter");
4158 doc.appendChild(presenter);
4160 TQPtrList<KoDocumentChild> embeddedObjectsActivePage;
4162 KoStoreDrag *kd =
new KoStoreDrag(
"application/x-kpresenter", 0L );
4163 TQDragObject* dragObject = kd;
4165 TQBuffer buffer(arr);
4166 KoStore* store = KoStore::createStore( &buffer, KoStore::Write,
"application/x-kpresenter" );
4168 m_activePage->getAllEmbeddedObjectSelected(embeddedObjectsActivePage );
4172 TQValueList<KoPictureKey> savePictures;
4173 TQPtrListIterator<KoDocumentChild> chl( embeddedObjectsActivePage );
4174 for( ; chl.current(); ++chl ) {
4175 KoDocument* childDoc = chl.current()->document();
4176 if ( childDoc && !childDoc->isStoredExtern() )
4177 (void) childDoc->saveToStore( store, TQString::number( i++ ) );
4180 m_activePage->copyObjs(doc, presenter, savePictures);
4182 KPrDocument* kprdoc = m_view->kPresenterDoc();
4183 if ( !embeddedObjectsActivePage.isEmpty())
4185 kprdoc->saveEmbeddedObject(m_activePage, embeddedObjectsActivePage,doc,presenter);
4188 if ( !savePictures.isEmpty() ) {
4190 presenter.appendChild( kprdoc->pictureCollection()->saveXML( KoPictureCollection::CollectionPicture, doc, savePictures ) );
4192 kprdoc->pictureCollection()->saveToStore( KoPictureCollection::CollectionPicture, store, savePictures );
4194 if ( savePictures.count() == 1 )
4196 KoPicture pic = kprdoc->pictureCollection()->findPicture( savePictures.first() );
4197 TQDragObject* picDrag = pic.dragObject( 0L );
4199 KMultipleDrag* multipleDrag =
new KMultipleDrag( 0L );
4200 multipleDrag->addDragObject( kd );
4201 multipleDrag->addDragObject( picDrag );
4202 dragObject = multipleDrag;
4207 if ( store->open(
"root" ) )
4209 TQCString s = doc.toCString();
4211 (void)store->write( s.data(), s.size()-1 );
4216 kd->setEncodedData( arr );
4217 TQApplication::clipboard()->setData( dragObject, TQClipboard::Clipboard );
4220void KPrCanvas::deleteObjs()
4223 KCommand *cmd=m_activePage->deleteSelectedObjects();
4224 m_view->kPresenterDoc()->deSelectAllObj();
4226 m_view->kPresenterDoc()->addCommand( cmd );
4227 emit objectSelectedChanged();
4228 setToolEditMode( toolEditMode );
4232void KPrCanvas::enterEvent( TQEvent *e )
4234 m_view->setRulerMousePos( ( ( TQMouseEvent* )e )->x(), ( ( TQMouseEvent* )e )->y() );
4235 m_view->setRulerMouseShow(
true );
4238void KPrCanvas::leaveEvent( TQEvent * )
4240 m_view->setRulerMouseShow(
false );
4243TQPtrList<KPrObject> KPrCanvas::objectList()
const
4245 return m_activePage->objectList();
4248const TQPtrList<KPrObject> &KPrCanvas::getObjectList()
const
4250 return m_activePage->objectList();
4253unsigned int KPrCanvas::currPgNum()
const
4255 return m_view->getCurrPgNum();
4258TQColor KPrCanvas::txtBackCol()
const
4260 return m_view->kPresenterDoc()->txtBackCol();
4263bool KPrCanvas::spInfiniteLoop()
const
4265 return m_view->kPresenterDoc()->spInfiniteLoop();
4268bool KPrCanvas::spShowEndOfPresentationSlide()
const
4270 return m_view->kPresenterDoc()->spShowEndOfPresentationSlide();
4273bool KPrCanvas::spManualSwitch()
const
4275 return m_view->kPresenterDoc()->spManualSwitch();
4278TQRect KPrCanvas::getPageRect(
bool decBorders )
const
4280 return m_view->kPresenterDoc()->getPageRect( decBorders );
4283unsigned int KPrCanvas::pageNums()
const
4285 return m_view->kPresenterDoc()->getPageNums();
4288void KPrCanvas::_repaint(
bool )
4290 m_view->kPresenterDoc()->repaint(
false );
4293void KPrCanvas::_repaint(
const TQRect &r )
4295 m_view->kPresenterDoc()->repaint( r );
4298void KPrCanvas::_repaint( KPrObject *o )
4300 m_view->kPresenterDoc()->repaint( o );
4303void KPrCanvas::slotExitPres()
4305 m_view->screenStop();
4308void KPrCanvas::setDrawingMode()
4310 m_presMenu->setItemChecked( PM_DM,
true );
4313 setCursor( KPrUtils::penCursor() );
4316void KPrCanvas::setSwitchingMode(
bool continueTimer )
4318 m_presMenu->setItemChecked( PM_DM,
false );
4323 m_drawLineInDrawMode =
false;
4324 setCursor( blankCursor );
4326 if ( continueTimer && !spManualSwitch() )
4327 m_view->continueAutoPresTimer();
4330void KPrCanvas::exitEditMode(
bool repaint )
4334 if ( m_editObject->getType() == OT_TEXT )
4336 if(m_currentTextObjectView)
4338 m_currentTextObjectView->clearSelection();
4342 m_currentTextObjectView->drawCursor(
false );
4343 m_currentTextObjectView->terminate();
4345 KPrTextObject *kpTextObj = m_currentTextObjectView->kpTextObject();
4346 kpTextObj->setEditingTextObj(
false );
4347 delete m_currentTextObjectView;
4348 m_currentTextObjectView = 0;
4351 _repaint(
static_cast<KPrObject*
>( kpTextObj ) );
4354 m_view->kPresenterDoc()->updateSideBarItem( m_activePage );
4355 emit objectSelectedChanged();
4358 else if (m_editObject->getType() == OT_PART )
4360 static_cast<KPrPartObject *
>(m_editObject)->deactivate();
4361 _repaint( m_editObject );
4369bool KPrCanvas::getPixmapOrigAndCurrentSize( KPrPixmapObject *&obj, KoSize *origSize, KoSize *currentSize )
4371 *origSize = KoSize(obj->originalSize().width(),obj->originalSize().height());
4372 *currentSize = obj->getSize();
4376void KPrCanvas::picViewOriginalSize()
4378 KPrDocument *doc = m_view->kPresenterDoc();
4379 KPrPixmapObject *
object = m_activePage->picViewOrigHelper();
4381 KoSize newSize( doc->zoomHandler()->pixelXToPt( object->originalSize().width() ),
4382 doc->zoomHandler()->pixelYToPt( object->originalSize().height() ) );
4384 KoRect pageRect = m_activePage->getPageRect();
4387 if ( newSize.width() > pageRect.width() )
4388 fakt = pageRect.width() / newSize.width();
4389 if ( newSize.height() > pageRect.height() )
4390 fakt = TQMIN( fakt, pageRect.height() / newSize.height() );
4392 KoSize diff( newSize.width() * fakt - object->getSize().width(),
4393 newSize.height() * fakt - object->getSize().height() );
4395 KPrResizeCmd *resizeCmd =
new KPrResizeCmd( i18n(
"Scale to Original Size" ),
4396 KoPoint( 0, 0 ), diff,
object, doc );
4397 resizeCmd->execute();
4398 doc->addCommand( resizeCmd );
4401void KPrCanvas::picViewOrig640x480()
4403 picViewOrigHelper(640, 480);
4406void KPrCanvas::picViewOrig800x600()
4408 picViewOrigHelper(800, 600);
4411void KPrCanvas::picViewOrig1024x768()
4413 picViewOrigHelper(1024, 768);
4416void KPrCanvas::picViewOrig1280x1024()
4418 picViewOrigHelper(1280, 1024);
4421void KPrCanvas::picViewOrig1600x1200()
4423 picViewOrigHelper(1600, 1200);
4426void KPrCanvas::picViewOrigHelper(
int x,
int y)
4428 KPrPixmapObject *obj = 0;
4432 obj=m_activePage->picViewOrigHelper();
4434 if ( obj && !getPixmapOrigAndCurrentSize( obj, &origSize, ¤tSize ) )
4436 KoSize pgSize = m_activePage->getPageRect().size();
4438 if ( x == -1 && y == -1 ) {
4439 x = (int)origSize.width();
4440 y = (int)origSize.height();
4443 TQSize presSize( x, y );
4445 scalePixmapToBeOrigIn( currentSize, pgSize, presSize, obj );
4448void KPrCanvas::picViewOrigFactor()
4452void KPrCanvas::scalePixmapToBeOrigIn(
const KoSize ¤tSize,
const KoSize &pgSize,
4453 const TQSize &presSize, KPrPixmapObject *obj )
4455 TQRect desk = TDEGlobalSettings::desktopGeometry(
this);
4456 double faktX = (double)presSize.width() / (double)desk.width();
4457 double faktY = (double)presSize.height() / (double)desk.height();
4458 double w = pgSize.width() * faktX;
4459 double h = pgSize.height() * faktY;
4461 KPrResizeCmd *resizeCmd =
new KPrResizeCmd( i18n(
"Scale Picture to Be Shown 1:1 in Presentation Mode" ),
4462 KoPoint( 0, 0 ), KoSize( w - currentSize.width(), h - currentSize.height() ),
4463 obj, m_view->kPresenterDoc() );
4464 resizeCmd->execute();
4465 m_view->kPresenterDoc()->addCommand( resizeCmd );
4468void KPrCanvas::setTextBackground( KPrTextObject * )
4473 TQPixmap pix( m_activePage->getZoomPageRect().size() );
4474 TQPainter painter( &pix );
4475 m_activePage->background()->drawBackground( &painter,
false );
4476 TQPixmap bpix( obj->getSize().toTQSize() );
4477 bitBlt( &bpix, 0, 0, &pix, obj->getOrig().x(), obj->getOrig().y() -
4478 m_activePage->getZoomPageRect().height() * ( m_view->getCurrPgNum() - 1 ), bpix.width(), bpix.height() );
4479 TQBrush b( white, bpix );
4480 TQPalette pal( obj->textObjectView()->palette() );
4481 pal.setBrush( TQColorGroup::Base, b );
4482 obj->textObjectView()->setPalette( pal );
4487KoPoint KPrCanvas::diffGrid( KoRect &rect,
double diffx,
double diffy )
4489 KPrDocument * doc( m_view->kPresenterDoc() );
4490 KoPoint move( 0, 0 );
4492 double tempx = ( int( rect.topLeft().x() / doc->getGridX() ) * doc->getGridX() ) - rect.topLeft().x();
4495 tempx += doc->getGridX();
4496 while ( diffx > tempx )
4499 tempx += doc->getGridX();
4504 while ( diffx < tempx )
4507 tempx -= doc->getGridX();
4510 double tempy = ( int( rect.topLeft().y() / doc->getGridY() ) * doc->getGridY() ) - rect.topLeft().y();
4513 tempy += doc->getGridY();
4514 while ( diffy > tempy )
4517 tempy += doc->getGridY();
4522 while ( diffy < tempy )
4525 tempy -= doc->getGridY();
4533void KPrCanvas::moveObjectsByKey(
int x,
int y )
4535 KPrDocument *doc( m_view->kPresenterDoc() );
4538 double diffx = m_view->zoomHandler()->unzoomItX( x );
4539 double diffy = m_view->zoomHandler()->unzoomItY( y );
4540 KoPoint move( diffx, diffy );
4542 bool snapToGrid = doc->snapToGrid() && !m_disableSnapping;
4543 bool snapToGuideLines = doc->showGuideLines() && !m_disableSnapping;
4552 double tempx = int( rect.x() / doc->getGridX() ) * doc->getGridX();
4555 move.setX( tempx - rect.x() );
4556 while ( rect.x() - tempx >= -1E-10 )
4558 tempx += doc->getGridX();
4559 move.setX( tempx - rect.x() );
4562 else if ( diffx < 0 )
4564 move.setX( tempx - rect.x() );
4565 while ( rect.x() - tempx <= 1E-10 )
4567 tempx -= doc->getGridX();
4568 move.setX( tempx - rect.x() );
4572 double tempy = int( rect.y() / doc->getGridY() ) * doc->getGridY();
4575 move.setY( tempy - rect.y() );
4576 while ( rect.y() - tempy >= -1E-10 )
4578 tempy += doc->getGridY();
4579 move.setY( tempy - rect.y() );
4582 else if ( diffy < 0 )
4584 move.setY( tempy - rect.y() );
4585 while ( rect.y() - tempy <= 1E-10 )
4587 tempy -= doc->getGridY();
4588 move.setY( tempy - rect.y() );
4593 if ( snapToGuideLines )
4598 KoRect movedRect( rect );
4599 movedRect.moveBy( diffx, diffy );
4600 movedRect.moveBy( -m_moveSnapDiff.x(), -m_moveSnapDiff.y() );
4601 move -= m_moveSnapDiff;
4603 m_moveSnapDiff = KoPoint( 0, 0 );
4605 KoGuides::SnapStatus snapStatus = KoGuides::SNAP_NONE;
4606 m_gl.snapToGuideLines( movedRect, KEY_SNAP_DISTANCE, snapStatus, m_moveSnapDiff );
4608 move += m_moveSnapDiff;
4612 m_gl.diffNextGuide( rect, move );
4617 KoRect pageRect( m_activePage->getPageRect() );
4618 if ( rect.left() + move.x() < pageRect.left() )
4620 move.setX( pageRect.left() - rect.left() );
4622 else if ( rect.right() + move.x() > pageRect.right() )
4624 move.setX( pageRect.right() - rect.right() );
4626 if ( rect.top() + move.y() < pageRect.top() )
4628 move.setY( pageRect.top() - rect.top() );
4630 else if ( rect.bottom() + move.y() > pageRect.bottom() )
4632 move.setY( pageRect.bottom() - rect.bottom() );
4636 if ( snapToGuideLines )
4639 KoRect movedRect( rect );
4640 movedRect.moveBy( move.x(), move.y() );
4641 m_gl.repaintSnapping( movedRect );
4644 if ( move != KoPoint( 0, 0 ) )
4647 m_activePage->moveObject( m_view, move,
false );
4648 m_view->updateObjectStatusBarItem();
4653void KPrCanvas::moveObjectsByMouse( KoPoint &pos,
bool keepXorYunchanged )
4655 KPrDocument *doc( m_view->kPresenterDoc() );
4658 KoPoint move( 0, 0 );
4659 double diffx = pos.x() - m_origMousePos.x();
4660 double diffy = pos.y() - m_origMousePos.y();
4662 bool snapToGrid = doc->snapToGrid() && !m_disableSnapping;
4663 bool snapToGuideLines = doc->showGuideLines() && !m_disableSnapping;
4665 move = KoPoint( diffx, diffy );
4666 m_origMousePos = pos;
4669 KoRect movedRect( rect );
4670 movedRect.moveBy( diffx, diffy );
4671 movedRect.moveBy( -m_moveSnapDiff.x(), -m_moveSnapDiff.y() );
4672 move -= m_moveSnapDiff;
4674 m_moveSnapDiff = KoPoint( 0, 0 );
4675 KoGuides::SnapStatus snapStatus = KoGuides::SNAP_NONE;
4679 m_moveSnapDiff.setX( tqRound( movedRect.topLeft().x() / doc->getGridX()) * doc->getGridX()
4680 - movedRect.topLeft().x() );
4681 m_moveSnapDiff.setY( tqRound( movedRect.topLeft().y() / doc->getGridY()) * doc->getGridY()
4682 - movedRect.topLeft().y() );
4683 snapStatus = KoGuides::SNAP_BOTH;
4686 if ( snapToGuideLines )
4688 m_gl.snapToGuideLines( movedRect, MOUSE_SNAP_DISTANCE, snapStatus, m_moveSnapDiff );
4691 move += m_moveSnapDiff;
4694 KoPoint diffDueToBorders(0,0);
4695 KoRect pageRect( m_activePage->getPageRect() );
4696 if ( rect.left() + move.x() < pageRect.left() )
4697 diffDueToBorders.setX( pageRect.left() - (rect.left() + move.x()) );
4698 else if ( rect.right() + move.x() > pageRect.right() )
4699 diffDueToBorders.setX( pageRect.right() - (rect.right() + move.x()) );
4701 if ( rect.top() + move.y() < pageRect.top() )
4702 diffDueToBorders.setY( pageRect.top() - (rect.top() + move.y()) );
4703 else if ( rect.bottom() + move.y() > pageRect.bottom() )
4704 diffDueToBorders.setY( pageRect.bottom() - (rect.bottom() + move.y()) );
4706 m_moveSnapDiff += diffDueToBorders;
4707 move += diffDueToBorders;
4709 movedRect.moveBy( m_moveSnapDiff.x(), m_moveSnapDiff.y() );
4710 if ( keepXorYunchanged )
4712 KoPoint diff( m_moveStartPosMouse - movedRect.topLeft() );
4713 if ( fabs( diff.x() ) > fabs( diff.y() ) )
4715 m_moveSnapDiff.setY( m_moveSnapDiff.y() + m_moveStartPosMouse.y() - movedRect.y() );
4716 movedRect.moveTopLeft( KoPoint( movedRect.x(), m_moveStartPosMouse.y() ) );
4717 move.setY( movedRect.y() - rect.y() );
4721 m_moveSnapDiff.setX( m_moveSnapDiff.x() + m_moveStartPosMouse.x() - movedRect.x() );
4722 movedRect.moveTopLeft( KoPoint( m_moveStartPosMouse.x(), movedRect.y() ) );
4723 move.setX( movedRect.x() - rect.x() );
4727 if ( snapToGuideLines )
4730 m_gl.repaintSnapping( movedRect );
4733 if ( move != KoPoint( 0, 0 ) )
4736 m_activePage->moveObject( m_view, move,
false );
4741void KPrCanvas::resizeObject( ModifyType _modType,
const KoPoint & point,
bool keepRatio,
bool scaleAroundCenter )
4743 KPrObject *kpobject = m_resizeObject;
4745 TQRect oldBoundingRect( m_view->zoomHandler()->zoomRect( kpobject->getRepaintRect() ) );
4747 KoRect objRect = kpobject->getRealRect();
4748 KoGuides::SnapStatus snapStatus( KoGuides::SNAP_NONE );
4753 bool bottom =
false;
4754 if ( _modType == MT_RESIZE_UP || _modType == MT_RESIZE_LU || _modType == MT_RESIZE_RU )
4757 snapStatus |= KoGuides::SNAP_HORIZ;
4759 if ( _modType == MT_RESIZE_DN || _modType == MT_RESIZE_LD || _modType == MT_RESIZE_RD )
4762 snapStatus |= KoGuides::SNAP_HORIZ;
4764 if ( _modType == MT_RESIZE_LF || _modType == MT_RESIZE_LU || _modType == MT_RESIZE_LD )
4767 snapStatus |= KoGuides::SNAP_VERT;
4769 if ( _modType == MT_RESIZE_RT || _modType == MT_RESIZE_RU || _modType == MT_RESIZE_RD )
4772 snapStatus |= KoGuides::SNAP_VERT;
4775 double newLeft = objRect.left();
4776 double newRight = objRect.right();
4777 double newTop = objRect.top();
4778 double newBottom = objRect.bottom();
4781 if ( point.y() < objRect.bottom() - MIN_SIZE )
4787 newTop = objRect.bottom() - MIN_SIZE;
4792 if ( point.y() > objRect.top() + MIN_SIZE )
4794 newBottom = point.y();
4798 newBottom = objRect.top() + MIN_SIZE;
4803 if ( point.x() < objRect.right() - MIN_SIZE )
4805 newLeft = point.x();
4809 newLeft = objRect.right() - MIN_SIZE;
4814 if ( point.x() > objRect.left() + MIN_SIZE )
4816 newRight = point.x();
4820 newRight = objRect.left() + MIN_SIZE;
4824 double width = newRight - newLeft;
4825 double height = newBottom - newTop;
4827 if ( keepRatio && m_ratio != 0 )
4829 if ( ( top || bottom ) && ( right || left ) )
4831 if ( height * height * m_ratio > width * width / m_ratio )
4833 width = height * m_ratio;
4837 height = width / m_ratio;
4840 else if ( top || bottom )
4842 width = height * m_ratio;
4846 height = width / m_ratio;
4851 newTop = objRect.bottom() - height;
4855 newBottom = objRect.top() + height;
4859 newLeft = objRect.right() - width;
4863 newRight = objRect.left() + width;
4867 if ( scaleAroundCenter )
4869 KoPoint center( m_rectBeforeResize.center() );
4871 if ( newLeft != objRect.left() )
4873 width = 2 * ( center.x() - newLeft );
4875 else if ( newRight != objRect.right() )
4877 width = 2 * ( newRight - center.x() );
4883 height = width / m_ratio;
4887 if ( newTop != objRect.top() )
4889 height = 2 * ( center.y() - newTop );
4891 else if ( newBottom != objRect.bottom() )
4893 height = 2 * ( newBottom - center.y() );
4897 if ( width < MIN_SIZE )
4901 if ( height < MIN_SIZE )
4906 newLeft = center.x() - width / 2;
4907 newRight = newLeft + width;
4908 newTop = center.y() - height / 2;
4909 newBottom = newTop + height;
4912 if ( newLeft != objRect.left() || newRight != objRect.right() || newTop != objRect.top() || newBottom != objRect.bottom() )
4915 kpobject->resizeBy( width - objRect.width(), height - objRect.height() );
4917 if ( objRect.left() != newLeft || objRect.top() != newTop )
4919 kpobject->moveBy( KoPoint( newLeft - objRect.left(), newTop - objRect.top() ) );
4922 if ( m_view->kPresenterDoc()->showGuideLines() && !m_disableSnapping )
4924 KoRect rect( kpobject->getRealRect() );
4925 KoPoint sp( rect.topLeft() );
4928 sp.setX( rect.right() );
4932 sp.setY( rect.bottom() );
4934 m_gl.repaintSnapping( sp, snapStatus );
4937 _repaint( oldBoundingRect );
4938 _repaint( kpobject );
4939 emit objectSizeChanged();
4944void KPrCanvas::finishResizeObject(
const TQString &name,
bool layout )
4946 if ( m_resizeObject )
4948 KoPoint move = KoPoint( m_resizeObject->getOrig().x() - m_rectBeforeResize.x(),
4949 m_resizeObject->getOrig().y() - m_rectBeforeResize.y() );
4950 KoSize size = KoSize( m_resizeObject->getSize().width() - m_rectBeforeResize.width(),
4951 m_resizeObject->getSize().height() - m_rectBeforeResize.height() );
4953 if ( ( m_resizeObject->getRect() ) != m_rectBeforeResize )
4955 KPrResizeCmd *resizeCmd =
new KPrResizeCmd( name, move, size, m_resizeObject,
4956 m_view->kPresenterDoc() );
4958 m_view->kPresenterDoc()->addCommand( resizeCmd );
4962 m_view->kPresenterDoc()->layout( m_resizeObject );
4965 m_isResizing =
false;
4966 _repaint( m_resizeObject );
4967 m_resizeObject = NULL;
4971void KPrCanvas::raiseObject( KPrObject *
object )
4973 if ( objectList().count() <= 1 )
4976 if ( m_objectDisplayAbove == 0 )
4978 if ( m_activePage->numSelected() == 1 )
4980 m_objectDisplayAbove = object;
4985void KPrCanvas::lowerObject()
4987 m_objectDisplayAbove = 0;
4990const TQPtrList<KPrObject> KPrCanvas::displayObjectList()
const
4992 TQPtrList<KPrObject> list = objectList();
4993 list.setAutoDelete(
false );
4995 if ( m_objectDisplayAbove )
4999 int pos = objectList().findRef( m_objectDisplayAbove );
5000 if ( pos != -1 && m_objectDisplayAbove->isSelected() )
5003 list.append( m_objectDisplayAbove );
5014void KPrCanvas::playSound(
const TQString &soundFileName )
5018 soundPlayer =
new KPrSoundPlayer( soundFileName );
5019 soundPlayer->play();
5022void KPrCanvas::stopSound()
5024 if ( soundPlayer ) {
5025 soundPlayer->stop();
5031void KPrCanvas::setXimPosition(
int x,
int y,
int w,
int h, TQFont *f )
5033 TQWidget::setMicroFocusHint( x - diffx(), y - diffy(), w, h,
true, f );
5036void KPrCanvas::createEditing( KPrTextObject *textObj )
5038 if( m_currentTextObjectView)
5040 m_currentTextObjectView->terminate();
5041 delete m_currentTextObjectView;
5042 m_currentTextObjectView = 0;
5045 m_currentTextObjectView = textObj->createKPTextView(
this );
5046 m_editObject = textObj;
5049void KPrCanvas::terminateEditing( KPrTextObject *textObj )
5051 if ( m_currentTextObjectView && m_currentTextObjectView->kpTextObject() == textObj )
5053 m_currentTextObjectView->terminate();
5054 delete m_currentTextObjectView;
5055 m_currentTextObjectView = 0;
5063 if ( !m_drawLineWithCubicBezierCurve )
5065 TQPen pen = TQPen( TQt::black, 1, TQt::DashLine );
5067 double angle = KoPoint::getAngle( m_endPoint, m_startPoint );
5068 drawFigure( L_SQUARE, &p, m_endPoint, pen.color(), pen.width(), angle,m_view->zoomHandler() );
5070 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
5071 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
5073 KoPoint symmetricEndPoint = m_startPoint * 2 - m_endPoint;
5075 angle = KoPoint::getAngle( symmetricEndPoint, m_startPoint );
5076 drawFigure( L_SQUARE, &p, symmetricEndPoint, pen.color(), pen.width(), angle,m_view->zoomHandler() );
5079 p.drawLine( m_view->zoomHandler()->zoomPoint( m_startPoint ),
5080 m_view->zoomHandler()->zoomPoint( symmetricEndPoint ) );
5083 p.setPen( TQPen( TQt::black, 1, TQt::SolidLine ) );
5084 p.drawCubicBezier( points.zoomPointArray( m_view->zoomHandler() ) );
5089 KoPoint startPoint( m_pointArray.at( m_indexPointArray - 1 ) );
5091 p.drawLine( m_view->zoomHandler()->zoomPoint( startPoint ),
5092 m_view->zoomHandler()->zoomPoint( m_endPoint ) );
5100 if ( m_indexPointArray > 0 )
5102 for (
int count = 0; count < m_indexPointArray - 4; count += 4 )
5104 double _firstX = m_pointArray.at( count ).x();
5105 double _firstY = m_pointArray.at( count ).y();
5107 double _fourthX = m_pointArray.at( count + 1 ).x();
5108 double _fourthY = m_pointArray.at( count + 1 ).y();
5110 double _secondX = m_pointArray.at( count + 2 ).x();
5111 double _secondY = m_pointArray.at( count + 2 ).y();
5113 double _thirdX = m_pointArray.at( count + 3 ).x();
5114 double _thirdY = m_pointArray.at( count + 3 ).y();
5116 KoPointArray points;
5117 points.putPoints( 0, 4, _firstX,_firstY, _secondX,_secondY, _thirdX,_thirdY, _fourthX,_fourthY );
5119 p.drawCubicBezier( points.zoomPointArray( m_view->zoomHandler() ) );
5125void KPrCanvas::drawPolygon( TQPainter &p,
const KoRect &rect )
5127 KoRect nRect = rect.normalize();
5128 bool checkConcavePolygon = m_view->getCheckConcavePolygon();
5129 int cornersValue = m_view->getCornersValue();
5130 int sharpnessValue = m_view->getSharpnessValue();
5132 KoRect _rect( 0, 0, nRect.width(), nRect.height() );
5133 double angle = 2 * M_PI / cornersValue;
5134 double diameter =
static_cast<double>( TQMAX( _rect.width(), _rect.height() ) );
5135 double radius = diameter * 0.5;
5137 KoPointArray _points( checkConcavePolygon ? cornersValue * 2 : cornersValue );
5138 _points.setPoint( 0, 0, tqRound( -radius ) );
5141 double ymin = tqRound( -radius );
5143 if ( checkConcavePolygon ) {
5144 angle = angle / 2.0;
5146 double r = radius - ( sharpnessValue / 100.0 * radius );
5147 for (
int i = 1; i < cornersValue * 2; ++i ) {
5154 xp = radius * sin( a );
5155 yp = -radius * cos( a );
5158 _points.setPoint( i, xp, yp );
5167 for (
int i = 1; i < cornersValue; ++i ) {
5168 double xp = radius * sin( a );
5169 double yp = -radius * cos( a );
5171 _points.setPoint( i, xp, yp );
5180 KoRect _changRect = _points.boundingRect();
5181 double fx = _rect.width() / _changRect.width();
5182 double fy = _rect.height() / _changRect.height();
5185 KoPointArray tmpPoints;
5186 KoPointArray::ConstIterator it;
5187 for ( it = _points.begin(); it != _points.end(); ++it ) {
5188 KoPoint point = (*it);
5189 double tmpX = ( point.x() - xmin) * fx + nRect.x();
5190 double tmpY = ( point.y() - ymin) * fy + nRect.y();
5192 tmpPoints.putPoints( _index, 1, tmpX,tmpY );
5195 p.drawPolygon( tmpPoints.zoomPointArray( m_view->zoomHandler() ) );
5196 m_pointArray = tmpPoints;
5200bool KPrCanvas::oneObjectTextSelected()
const
5202 return m_activePage->oneObjectTextSelected();
5205bool KPrCanvas::oneObjectTextExist()
const
5207 return m_activePage->oneObjectTextExist();
5210KPrPage* KPrCanvas::activePage()
const
5212 return m_activePage;
5215void KPrCanvas::setActivePage( KPrPage* active )
5220 m_objectDisplayAbove = 0;
5221 m_activePage = active;
5226 m_paintGuides = state;
5229bool KPrCanvas::objectIsAHeaderFooterHidden(KPrObject *obj)
const
5231 if (( m_view->kPresenterDoc()->isHeader(obj) && !m_activePage->hasHeader() )
5232 || ( m_view->kPresenterDoc()->isFooter(obj) && !m_activePage->hasFooter() ) )
5237int KPrCanvas::numberOfObjectSelected()
const
5239 int nb = m_activePage->numSelected();
5243KPrObject *KPrCanvas::getSelectedObj()
const
5245 KPrObject *obj = m_activePage->getSelectedObj();
5249void KPrCanvas::ungroupObjects()
5251 KMacroCommand *macro = 0;
5252 m_activePage->ungroupObjects( ¯o );
5254 m_view->kPresenterDoc()->addCommand( macro );
5257void KPrCanvas::groupObjects()
5259 m_activePage->groupObjects();
5264 return m_activePage->getRealRect( all );
5267void KPrCanvas::scrollTopLeftPoint(
const TQPoint & pos )
5269 m_view->getHScrollBar()->setValue( pos.x() );
5270 m_view->getVScrollBar()->setValue( pos.y() );
5273void KPrCanvas::changePicture(
const KURL & url, TQWidget *window )
5275 m_activePage->changePicture( url, window );
5278unsigned int KPrCanvas::objNums()
const
5280 return m_activePage->objNums();
5284void KPrCanvas::ensureVisible(
int x,
int y,
int xmargin,
int ymargin )
5287 int newy= (y+ymargin)-(visibleRect().bottom()+diffy());
5290 m_view->getVScrollBar()->setValue(m_view->getVScrollBar()->value()+newy);
5293 newy= (y )-(visibleRect().top()+diffy());
5295 m_view->getVScrollBar()->setValue(m_view->getVScrollBar()->value()+newy - ymargin);
5298 int newx= (x+xmargin)-(visibleRect().right()+diffx());
5300 m_view->getHScrollBar()->setValue(m_view->getHScrollBar()->value()+newx);
5303 newx= x -(visibleRect().left()+diffx());
5305 m_view->getHScrollBar()->setValue(m_view->getHScrollBar()->value()+newx - xmargin );
5310void KPrCanvas::textContentsToHeight()
5313 if ( lst.isEmpty() )
5315 TQPtrListIterator<KPrTextObject> it( lst );
5316 KMacroCommand * macro = 0L;
5317 for ( ; it.current() ; ++it ) {
5318 KCommand *cmd= it.current()->textContentsToHeight();
5322 macro =
new KMacroCommand(i18n(
"Extend Text Contents to Height"));
5323 macro->addCommand( cmd);
5324 _repaint( it.current() );
5330 m_view->kPresenterDoc()->addCommand( macro );
5331 m_view->kPresenterDoc()->repaint(
this);
5336void KPrCanvas::textObjectToContents()
5339 if ( lst.isEmpty() )
5341 TQPtrListIterator<KPrTextObject> it( lst );
5342 KMacroCommand * macro = 0L;
5343 for ( ; it.current() ; ++it ) {
5344 KCommand *cmd= it.current()->textObjectToContents();
5348 macro =
new KMacroCommand(i18n(
"Extend Text to Contents"));
5349 macro->addCommand( cmd);
5356 m_view->kPresenterDoc()->addCommand( macro );
5357 m_view->kPresenterDoc()->repaint(
this);
5362void KPrCanvas::flipObject(
bool _horizontal )
5364 TQPtrList<KPrObject> lst;
5365 TQPtrListIterator<KPrObject> it(getObjectList());
5366 for ( ; it.current(); ++it ) {
5367 if ( it.current()->isSelected() &&
5368 it.current()->getType() != OT_AUTOFORM &&
5369 it.current()->getType() != OT_PART &&
5370 it.current()->getType() != OT_TEXT )
5372 lst.append( it.current() );
5375 if ( lst.isEmpty() )
5378 KPrFlipObjectCommand *flipCmd =
new KPrFlipObjectCommand( i18n(
"Flip Objects"),
5379 m_view->kPresenterDoc(),
5382 m_view->kPresenterDoc()->addCommand( flipCmd );
5385void KPrCanvas::lowerObjs(
bool backward )
5388 m_activePage->lowerObjs( backward );
5391void KPrCanvas::raiseObjs(
bool forward )
5394 m_activePage->raiseObjs( forward );
5397TQPtrList<KPrTextObject> KPrCanvas::listOfTextObjs()
const
5399 TQPtrList<KPrTextObject> lst;
5400 TQPtrListIterator<KPrObject> it(getObjectList());
5401 for ( ; it.current(); ++it ) {
5402 if ( it.current()->getType() == OT_TEXT )
5404 if ( objectIsAHeaderFooterHidden(it.current()))
5407 lst.append(
static_cast<KPrTextObject*
>( it.current() ));
5413KPrTextObject* KPrCanvas::textUnderMouse(
const TQPoint & point )
5415 TQPtrList<KPrTextObject> obj = listOfTextObjs();
5416 TQPtrListIterator<KPrTextObject> it2(obj );
5417 for ( ; it2.current() ; ++it2 ) {
5418 TQRect outerRect( m_view->kPresenterDoc()->zoomHandler()->zoomRect( it2.current()->getRect()) );
5419 if ( !it2.current()->isProtectContent() && outerRect.contains( point) )
5420 return it2.current();
5425void KPrCanvas::speakTextUnderMouse(TQWidget* w,
const TQPoint& p, uint flags)
5428 if ( w !=
this )
return;
5431 if ( p == TQPoint() )
return;
5432 KPrTextObject *to = textUnderMouse( w->mapFromGlobal( p ) );
5433 if ( to == m_prevSpokenTO )
return;
5434 m_prevSpokenTO = to;
5436 TQString text = to->textObject()->textDocument()->plainText();
5437 if ( !text.isEmpty() ) kospeaker->sayWidget( text );
5441bool KPrCanvas::checkCurrentTextEdit( KPrTextObject * textObj )
5443 bool emitChanged =
false;
5444 if ( textObj && m_currentTextObjectView && m_currentTextObjectView->kpTextObject() != textObj )
5446 m_currentTextObjectView->kpTextObject()->setEditingTextObj(
false );
5447 _repaint( m_currentTextObjectView->kpTextObject() );
5449 m_currentTextObjectView->terminate(
false);
5450 delete m_currentTextObjectView;
5451 m_currentTextObjectView = 0L;
5456 if ( textObj && !m_currentTextObjectView )
5458 m_currentTextObjectView = textObj->createKPTextView(
this );
5466 KPrDocument * doc = m_view->kPresenterDoc();
5473 name = i18n(
"Align Objects Left" );
5476 name = i18n(
"Align Objects Top" );
5479 name = i18n(
"Align Objects Right" );
5482 name = i18n(
"Align Objects Bottom" );
5485 name = i18n(
"Align Objects Centered (horizontal)" );
5488 name = i18n(
"Align Objects Center/Vertical" );
5492 TQPtrList<KPrObject> objects;
5494 TQPtrListIterator<KPrObject> it( m_activePage->objectList() );
5495 for ( ; it.current() ; ++it )
5497 if ( it.current() == m_view->kPresenterDoc()->header() ||
5498 it.current() == m_view->kPresenterDoc()->footer() )
5501 if( it.current()->isSelected() && !it.current()->isProtect() ) {
5502 objects.append( it.current() );
5506 if ( objects.count() )
5508 KCommand * cmd =
new KPrAlignCmd( name, objects, at, doc );
5510 doc->addCommand( cmd );
5514bool KPrCanvas::canMoveOneObject()
const
5516 return m_activePage->canMoveOneObject();
5519void KPrCanvas::closeObject(
bool )
5521 TQPtrList<KPrObject> lst;
5522 TQPtrListIterator<KPrObject> it(getObjectList());
5523 for ( ; it.current(); ++it ) {
5524 if ( it.current()->isSelected()
5525 && (it.current()->getType() == OT_POLYLINE || it.current()->getType() == OT_FREEHAND
5526 || it.current()->getType() == OT_QUADRICBEZIERCURVE
5527 || it.current()->getType() == OT_CUBICBEZIERCURVE ))
5528 lst.append( it.current() );
5533 KCommand * cmd=
new KPrCloseObjectCommand( i18n(
"Close Object"), lst, m_view->kPresenterDoc() );
5535 m_view->kPresenterDoc()->addCommand( cmd );
5538void KPrCanvas::layout()
5540 TQPtrListIterator<KPrObject> it(getObjectList());
5541 for ( ; it.current(); ++it ) {
5542 if ( it.current()->getType() == OT_TEXT )
5543 static_cast<KPrTextObject *
>( it.current() )->layout();
5547KoPoint KPrCanvas::snapPoint( KoPoint &pos,
bool repaintSnapping )
5550 KPrDocument * doc( m_view->kPresenterDoc() );
5552 bool snapToGrid = doc->snapToGrid() && !m_disableSnapping;
5553 bool snapToGuideLines = doc->showGuideLines() && !m_disableSnapping;
5555 KoPoint snapDiff = KoPoint( 0, 0 );
5556 KoGuides::SnapStatus snapStatus = KoGuides::SNAP_NONE;
5560 snapDiff.setX( tqRound( sp.x() / doc->getGridX()) * doc->getGridX() - sp.x() );
5561 snapDiff.setY( tqRound( sp.y() / doc->getGridY()) * doc->getGridY() - sp.y() );
5562 snapStatus = KoGuides::SNAP_BOTH;
5565 if ( snapToGuideLines )
5567 m_gl.snapToGuideLines( sp, MOUSE_SNAP_DISTANCE, snapStatus, snapDiff );
5573 KoRect pageRect( m_activePage->getPageRect() );
5574 if ( sp.x() < pageRect.left() )
5575 sp.setX( pageRect.left() );
5576 else if ( sp.x() > pageRect.right() )
5577 sp.setX( pageRect.right() );
5579 if ( sp.y() < pageRect.top() )
5580 sp.setY( pageRect.top() );
5581 else if ( sp.y() > pageRect.bottom() )
5582 sp.setY( pageRect.bottom() );
5585 if ( repaintSnapping && snapToGuideLines )
5587 m_gl.repaintSnapping( sp, KoGuides::SNAP_BOTH );
5594void KPrCanvas::alignVertical(VerticalAlignmentType _type )
5596 KCommand *cmd = m_activePage->alignVertical( _type );
5598 m_view->kPresenterDoc()->addCommand( cmd );
5601KPrPixmapObject * KPrCanvas::getSelectedImage()
const
5603 return m_activePage->getSelectedImage();
5607KoPointArray KPrCanvas::getObjectPoints(
const KoPointArray &pointArray )
5609 KoRect rect = pointArray.boundingRect();
5611 KoPointArray points( pointArray );
5612 points.translate( -rect.x(), -rect.y() );
5619 switch ( object->getType() )
5623 m_view->openPopupMenuObject(
"picmenu_popup", point );
5627 KPrTextObject *obj=
dynamic_cast<KPrTextObject *
>(object);
5629 m_view->changeVerticalAlignmentStatus( obj->verticalAlignment() );
5630 m_view->openPopupMenuObject(
"textobject_popup", point );
5633 m_view->openPopupMenuObject(
"piemenu_popup", point );
5637 m_view->openPopupMenuObject(
"rectangleobject_popup", point );
5640 m_view->openPopupMenuObject(
"partobject_popup", point );
5643 m_view->openPopupMenuObject(
"polygonobject_popup", point );
5646 case OT_CUBICBEZIERCURVE:
5647 case OT_QUADRICBEZIERCURVE:
5649 m_view->openPopupMenuObject(
"closed_popup", point );
5652 case OT_CLOSED_LINE:
5653 m_view->openPopupMenuObject(
"flip_popup", point );
5656 if ( oneObjectTextSelected())
5657 m_view->openPopupMenuObject(
"textobject_popup", point );
5659 m_view->openPopupMenuObject(
"flip_popup", point );
5662 m_view->openPopupMenuObject(
"graphmenu_popup", point );
5667void KPrCanvas::popupContextMenu()
5670 if ( !m_drawMode && !spManualSwitch() )
5674 m_view->stopAutoPresTimer();
5676 setCursor( arrowCursor );
5677 TQPoint p( width()/2, height()/2 );
5678 int ret = m_presMenu->exec( p );
5680 if ( ret == -1 && !m_presMenu->isItemChecked( PM_DM ) && !spManualSwitch() )
5681 m_view->continueAutoPresTimer();
5684 if ( m_currentTextObjectView ) {
5687 KoPoint kop = m_currentTextObjectView->kpTextObject()->getOrig();
5688 TQPoint p = m_view->zoomHandler()->zoomPoint( kop );
5689 p = mapToGlobal( p );
5690 m_currentTextObjectView->showPopup( m_view, p, m_view->actionList() );
5693 if (!m_activePage)
return;
5694 KPrObject* obj = m_activePage->getSelectedObj();
5696 KoPoint kop = obj->getOrig();
5697 TQPoint p = m_view->zoomHandler()->zoomPoint( kop );
5698 p = mapToGlobal( p );
5701 TQPoint p = mapToGlobal( TQPoint() );
5702 m_view->openPopupMenuMenuPage( p );
Command to align objects.
void drawBackground(TQPainter *painter, const TQRect &rect, KPrPage *page, bool edit=false) const
Draws the background of page to painter.
void stopAutomaticPresentation()
Emmitted when presentation should be restarted This is used in automatic screen and infinite loop mod...
KPrPartObject * insertObject(const KoRect &rect)
Add a object.
void drawObjectsPres(TQPainter *painter, const TQPtrList< KPrObject > &_objects, PresStep step) const
Draw _objects shown at step to painter.
void drawAllObjectsInPage(TQPainter *painter, const TQPtrList< KPrObject > &obj, int pageNum) const
Draw obj to painter.
void insertLine(const KoPoint &startPoint, const KoPoint &endPoint)
Add a line.
KPrObject * getObjectAt(const KoPoint &pos, bool withoutProtected=false)
Returns the object at position pos.
void insertEllipse(const KoRect &rect)
Add a ellipse.
void doObjEffects(bool isAllreadyPainted=false)
This method animates the objects in the presentation.
void drawEditPage(TQPainter *painter, const TQRect &_rect, KPrPage *page, SelectionMode selectionMode) const
Draw _objects of page to painter.
void drawCubicBezierCurve(TQPainter &p, KoPointArray &points)
Draw a cubic bezier curve.
bool finishObjectEffects()
Finish the object effects.
void insertRect(const KoRect &rect)
Add a rectangle.
void redrawCubicBezierCurve(TQPainter &p)
Redraw the curve defined in m_pointArray.
void drawObjects(TQPainter *painter, const TQPtrList< KPrObject > &objects, SelectionMode selectionMode, bool contour, KPrTextView *textView, int pageNum) const
Draw _objects to painter.
KPrCanvas(TQWidget *parent=0, const char *name=0, KPrView *_view=0)
constructor
void drawPresPage(TQPainter *painter, const TQRect &_rect, PresStep step) const
Draw _objects of page shown at step to painter.
void printPage(TQPainter *, PresStep step, KPrinter *printer, int rows, int cols)
Draw page defined in step to painter.
void currentObjectEditChanged()
Emitted when the current frameset edit changes.
void presGotoFirstPage()
Go to first slide of presentation.
void drawObjectsEdit(TQPainter *painter, const KoRect &rect, const TQPtrList< KPrObject > &_objects, SelectionMode selectionMode, int page) const
Draw _objects to painter.
void setPaintGuides(bool state)
Set the guide move state.
KPrTextObject * insertTextObject(const KoRect &rect)
Add a text object.
TQPtrList< KPrTextObject > selectedTextObjs() const
Returns the list of selected text objects.
void insertPicture(const KoRect &rect)
Add a picture.
void drawGrid(TQPainter *painter, const TQRect &rect2) const
draw grid
void drawPageInPix(TQPixmap &, int pgnum, int zoom, bool forceRealVariableValue=false, int forceWidth=0, int forceHeight=0)
Draw page into TQPixmap.
void objectPopup(KPrObject *object, const TQPoint &point)
Open the object popup.
void restartPresentation()
Emmitted when presentation should be restarted This is used in automatic screen and infinite loop mod...
void alignObjects(AlignType at)
Align objects.
bool pPrev(bool gotoPreviousPage=false)
Go to previous step of the presentation.
void startScreenPresentation(double zoomX, double zoomY, int curPgNum=-1)
Start a screen presentation All pages if curPgNum is -1, otherwise just curPgNum (1-based)
void setupMenus()
setup popupmenus
void insertPie(const KoRect &rect)
Add a pie/arc/chord.
bool exportPage(int nPage, int nWidth, int nHeight, const KURL &fileURL, const char *format, int quality=-1)
TQPtrList< KoTextFormatInterface > applicableTextInterfaces() const
Returns the list of interfaces to use for changing the text format.
virtual void paintEvent(TQPaintEvent *)
This method is used for repainting the canvas.
bool pNext(bool gotoNextPage=false)
Go to the next step in the presentation.
KoRect objectRect(bool all) const
get the rect for the objects
TQPtrList< KPrTextObject > applicableTextObjects() const
Returns the list of text objects, either selected or activated.
void insertAutoform(const KoRect &rect)
Add a autoform object.
Class for keeping a presentation step m_pageNumber the current page number 0 based m_step the current...