/* This file is part of the KDE project Copyright (C) 1998, 1999 Reginald Stadlbauer Copyright (C) 2005-2006 Thorsten Zachmann This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "KPrPage.h" #include "KPrBackDia.h" #include "autoformEdit/AFChoose.h" #include "KPrPropertyEditor.h" #include "KPrPgConfDia.h" #include "KPrEffectDia.h" #include "KPrRotationDialogImpl.h" #include "KPrShadowDialogImpl.h" #include "KPrImageEffectDia.h" #include "KPrBackground.h" #include "KPrPenStyleWidget.h" #include "KPrObjectProperties.h" #include #include "KPrSlideTransitionDia.h" #include "KPrPresDurationDia.h" #include "KPrPartObject.h" #include "KPrSideBar.h" #include "KPrNoteBar.h" #include "insertpagedia.h" #include "KPrCustomSlideShowDia.h" #include #include #include #include #include #include #include #include #include "KPrView.h" #include "KPrDocument.h" #include "KPrWebPresentation.h" #include "KPrMSPresentationSetup.h" #include "KPrTextObject.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "KPrViewIface.h" #include "KPrConfig.h" #include #include #include "KPrCommand.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "KPrTextDocument.h" #include #include #include #include "KPrFindReplace.h" #include "KPrVariableCollection.h" #include "KPrCanvas.h" #include #include #include "KPrStyleManager.h" #include "KPrPixmapObject.h" #include #include "KPrDuplicateObjDia.h" #include #include #include #include "KPrImportStyleDia.h" #include #include #include #include #include #include #include #include "KoSpell.h" #include "KPrPrinterDlg.h" using namespace KSpell2; #define COPYOASISFORMAT 0 static const char * const pageup_xpm[] = { " 14 14 2 1", ". c #000000", "# c none", "##############", "##############", "######..######", "#####....#####", "####......####", "###........###", "##############", "######..######", "#####....#####", "####......####", "###........###", "##############", "##############", "##############" }; static const char * const pagedown_xpm[] = { " 14 14 2 1", ". c #000000", "# c none", "##############", "##############", "##############", "###........###", "####......####", "#####....#####", "######..######", "##############", "###........###", "####......####", "#####....#####", "######..######", "##############", "##############" }; #ifdef HAVE_DPMS #include #include #include #include #include extern "C" { #ifndef HAVE_DPMSCAPABLE_PROTO Bool DPMSCapable( Display * ); #endif } #if defined(XIMStringConversionRetrival) || defined (__sun) || defined(__hpux) extern "C" { #endif Bool DPMSQueryExtension(Display *, int *, int *); Status DPMSEnable(Display *); Status DPMSDisable(Display *); Bool DPMSGetTimeouts(Display *, CARD16 *, CARD16 *, CARD16 *); #if defined(XIMStringConversionRetrival) || defined (__sun) || defined(__hpux) } #endif #endif static void enableDPMS(bool enable) { #ifdef HAVE_DPMS Display *display = qt_xdisplay(); int dummy; bool hasDPMS = DPMSQueryExtension(display, &dummy, &dummy); if (hasDPMS && DPMSCapable(display)) { if (enable) { kdDebug() << "Enabling DPMS" << endl; DPMSEnable(display); } else { kdDebug() << "Disabling DPMS" << endl; DPMSDisable(display); } } else qWarning("Server has no DPMS extension"); XFlush(display); #else Q_UNUSED(enable); /* keep gcc silent */ #endif } static bool isDPMSEnabled() { bool result = false; #ifdef HAVE_DPMS int event_base; int error_base; CARD16 x_standby; CARD16 x_suspend; CARD16 x_off; Display *display = qt_xdisplay(); if (DPMSQueryExtension(display, &event_base, &error_base)) if (DPMSCapable(display)) result = (DPMSGetTimeouts(display, &x_standby, &x_suspend, &x_off)); #endif return result; } KPrView::KPrView( KPrDocument* _doc, TQWidget *_parent, const char *_name ) : KoView( _doc, _parent, _name ) { setInstance( KPrFactory::global() ); if ( !_doc->isReadWrite() ) setXMLFile( "kpresenter_readonly.rc" ); else setXMLFile( "kpresenter.rc" ); dcop = 0; dcopObject(); // build it m_bDisplayFieldCode=false; // init afChoose = 0; m_propertyEditor = 0; pgConfDia = 0; rotateDia = 0; shadowDia = 0; imageEffectDia = 0; presDurationDia = 0; v_ruler = 0; h_ruler = 0; pen = KoPen( black, 1.0, Qt::SolidLine ); brush = TQBrush( white, SolidPattern ); lineBegin = L_NORMAL; lineEnd = L_NORMAL; gColor1 = red; gColor2 = green; gType = BCT_GHORZ; gUnbalanced = false; gXFactor = 100; gYFactor = 100; fillType = FT_BRUSH; pieType = PT_PIE; pieLength = 90 * 16; pieAngle = 45 * 16; setMouseTracking( true ); m_bShowGUI = true; presStarted = false; m_autoPresRestart = false; m_autoPresStop = false; rndX = 0; rndY = 0; m_editMaster = false; allowWebPres = true; allowMSPres = true; currPg = 0; sidebar = 0; notebar = 0; splitter = 0; pageBase = 0; m_canvas = 0L; m_spell.kospell = 0; m_spell.textIterator = 0L; m_spell.macroCmdSpellCheck = 0L; m_spell.dlg = 0; m_broker = Broker::openBroker( KSharedConfig::openConfig( "kpresenterrc" ) ); m_autoPresTimerConnected = false; m_actionList.setAutoDelete( true ); checkConcavePolygon = false; cornersValue = 3; sharpnessValue = 0; tbAlign = TQt::AlignLeft; tbFont = font(); tbColor = black; mirrorType = PM_NORMAL; depth = 0; swapRGB = false; grayscal = false; bright = 0; m_currentLineTool = LtLine; m_currentShapeTool = StRectangle; m_currentClosedLineTool = CltFreehand; m_searchEntry = 0L; m_replaceEntry = 0L; m_findReplace = 0L; m_switchPage=-1; m_fontDlg=0L; m_paragDlg=0L; m_pKPresenterDoc = _doc; createGUI(); setKeyCompression( true ); m_specialCharDlg=0L; if ( shell() ) changeNbOfRecentFiles( m_pKPresenterDoc->maxRecentFiles() ); connect(TQT_TQOBJECT(this), TQT_SIGNAL(embeddImage(const TQString &)), TQT_SLOT(insertPicture(const TQString &))); connect( m_pKPresenterDoc, TQT_SIGNAL( sig_refreshMenuCustomVariable()), TQT_TQOBJECT(this), TQT_SLOT( refreshCustomMenu())); // Cut and copy are directly connected to the selectionChanged signal if ( m_pKPresenterDoc->isReadWrite() ) connect( m_canvas, TQT_SIGNAL(selectionChanged(bool)), TQT_TQOBJECT(this), TQT_SLOT(slotChangeCutState(bool )/*setEnabled(bool)*/) ); else actionEditCut->setEnabled( false ); connect( m_canvas, TQT_SIGNAL(selectionChanged(bool)), actionEditCopy, TQT_SLOT(setEnabled(bool)) ); connect (m_canvas, TQT_SIGNAL(selectionChanged(bool)), actionChangeCase, TQT_SLOT(setEnabled(bool))); //connect (m_canvas, TQT_SIGNAL(selectionChanged(bool)), // actionCreateStyleFromSelection, TQT_SLOT(setEnabled(bool))); connect( m_canvas, TQT_SIGNAL( currentObjectEditChanged() ), this, TQT_SLOT( slotObjectEditChanged())); connect( h_ruler, TQT_SIGNAL( tabListChanged( const KoTabulatorList & ) ), this, TQT_SLOT( tabListChanged( const KoTabulatorList & ) ) ); //statusbar stuff connect( m_pKPresenterDoc, TQT_SIGNAL( pageNumChanged() ), TQT_TQOBJECT(this), TQT_SLOT( pageNumChanged()) ); connect( TQT_TQOBJECT(this), TQT_SIGNAL( currentPageChanged(int) ), TQT_TQOBJECT(this), TQT_SLOT( pageNumChanged()) ); connect( m_canvas, TQT_SIGNAL( objectSizeChanged() ), TQT_TQOBJECT(this), TQT_SLOT( updateObjectStatusBarItem() )); connect( m_canvas, TQT_SIGNAL( objectSelectedChanged() ), TQT_TQOBJECT(this), TQT_SLOT( updateObjectStatusBarItem() )); connect (m_pKPresenterDoc, TQT_SIGNAL(sig_updateRuler()),TQT_TQOBJECT(this), TQT_SLOT( slotUpdateRuler())); connect (m_pKPresenterDoc, TQT_SIGNAL(sig_updateRuler()),TQT_TQOBJECT(this), TQT_SLOT( slotUpdateScrollBarRanges())); connect (m_pKPresenterDoc, TQT_SIGNAL(sig_updateMenuBar()),TQT_TQOBJECT(this), TQT_SLOT(updateSideBarMenu())); connect (m_pKPresenterDoc, TQT_SIGNAL(unitChanged(KoUnit::Unit)),TQT_TQOBJECT(this), TQT_SLOT(slotUnitChanged(KoUnit::Unit))); connect( m_pKPresenterDoc, TQT_SIGNAL( modified( bool ) ), TQT_TQOBJECT(this), TQT_SLOT( documentModified( bool )) ); connect( m_pKPresenterDoc, TQT_SIGNAL(completed()), TQT_TQOBJECT(this), TQT_SLOT(loadingFinished())); KStatusBar * sb = statusBar(); m_sbPageLabel = 0L; m_sbObjectLabel = 0L; m_sbModifiedLabel = 0; m_sbZoomLabel = 0; m_sbUnitLabel = 0; if ( sb ) // No statusbar in e.g. konqueror { m_sbPageLabel = new KStatusBarLabel( TQString(), 0, sb ); m_sbPageLabel->tqsetAlignment( AlignLeft | AlignVCenter ); addStatusBarItem( m_sbPageLabel, 0 ); m_sbModifiedLabel = new KStatusBarLabel( " ", 0, sb ); m_sbModifiedLabel->tqsetAlignment( AlignLeft | AlignVCenter ); addStatusBarItem( m_sbModifiedLabel, 0 ); m_sbObjectLabel = new KStatusBarLabel( TQString(), 0, sb ); m_sbObjectLabel->tqsetAlignment( AlignLeft | AlignVCenter ); addStatusBarItem( m_sbObjectLabel, 1 ); m_sbZoomLabel = new KStatusBarLabel( ' ' + TQString::number( m_pKPresenterDoc->zoomHandler()->zoom() ) + "% ", 0, sb ); m_sbZoomLabel->tqsetAlignment( AlignHCenter | AlignVCenter ); addStatusBarItem( m_sbZoomLabel, 0 ); m_sbUnitLabel = new KStatusBarLabel( ' ' + KoUnit::unitDescription( m_pKPresenterDoc->unit() ) + ' ', 0, sb ); m_sbUnitLabel->tqsetAlignment( AlignHCenter | AlignVCenter ); addStatusBarItem( m_sbUnitLabel, 0 ); } //when kword is embedded into konqueror apply a zoom=100 //in konqueror we can't change zoom -- ### TODO ? if(!m_pKPresenterDoc->isReadWrite()) { setZoom( 100, true ); slotUpdateRuler(); initGui(); m_pKPresenterDoc->updateZoomRuler(); } setAcceptDrops( TRUE ); } DCOPObject* KPrView::dcopObject() { if ( !dcop ) dcop = new KPrViewIface( this ); return dcop; } KPrView::~KPrView() { delete m_findReplace; m_findReplace = 0L; if(sidebar) { KConfig *config=KGlobal::config(); config->setGroup("Global"); config->writeEntry("Sidebar", sidebar->isVisible()); } if(notebar) { KConfig *config=KGlobal::config(); config->setGroup("Global"); config->writeEntry("Notebar", notebar->isVisible()); } clearSpellChecker(); delete rb_lbegin; delete rb_lend; delete dcop; delete m_sbPageLabel; delete m_sbObjectLabel; delete notebar; delete m_searchEntry; m_searchEntry = 0L; delete m_replaceEntry; m_replaceEntry = 0L; delete m_propertyEditor; delete pgConfDia; delete rotateDia; delete shadowDia; delete afChoose; delete m_fontDlg; delete m_paragDlg; delete m_arrangeObjectsPopup; if ( m_specialCharDlg ) m_specialCharDlg->closeDialog(); // will call slotSpecialCharDlgClosed delete m_specialCharDlg; } void KPrView::setupPrinter( KPrinter &prt ) { deSelectAllObjects(); m_pKPresenterDoc->recalcVariables( VT_TIME ); m_pKPresenterDoc->recalcVariables( VT_DATE ); prt.setMinMax( 1, m_pKPresenterDoc->getPageNums() ); prt.setFromTo( 1, m_pKPresenterDoc->getPageNums() ); prt.setOption( "kde-range", m_pKPresenterDoc->selectedForPrinting() ); prt.setPageSelection(KPrinter::ApplicationSide); KoPageLayout tqlayout = m_pKPresenterDoc->pageLayout(); prt.setOption( "kde-margin-top", TQString::number(tqlayout.ptTop) ); prt.setOption( "kde-margin-bottom", TQString::number(tqlayout.ptBottom) ); prt.setOption( "kde-margin-left", TQString::number(tqlayout.ptLeft) ); prt.setOption( "kde-margin-right", TQString::number(tqlayout.ptRight) ); KoFormat pageFormat = tqlayout.format; prt.setPageSize( static_cast( KoPageFormat::printerPageSize( pageFormat ) ) ); if ( m_pKPresenterDoc->pageLayout().orientation == PG_LANDSCAPE || pageFormat == PG_SCREEN ) prt.setOrientation( KPrinter::Landscape ); else prt.setOrientation( KPrinter::Portrait ); if ( !prt.previewOnly() ) prt.addDialogPage( new KPrPrinterDlg( 0, "KPresenter page" ) ); } void KPrView::unZoomDocument(int &dpiX,int &dpiY) { // ### HACK: disable zooming-when-printing if embedded parts are used. // No koffice app supports zooming in paintContent currently. // Disable in ALL cases now bool doZoom=false; dpiX = doZoom ? 300 : KoGlobal::dpiX(); dpiY = doZoom ? 300 : KoGlobal::dpiY(); zoomHandler()->setZoomAndResolution( 100, dpiX, dpiY ); m_pKPresenterDoc->newZoomAndResolution( false, true /* for printing*/ ); } void KPrView::zoomDocument(int zoom) { zoomHandler()->setZoomAndResolution( zoom, KoGlobal::dpiX(), KoGlobal::dpiY() ); m_pKPresenterDoc->newZoomAndResolution( false, false ); updateRuler(); } void KPrView::print( KPrinter &prt ) { float left_margin = 0.0; float top_margin = 0.0; int dpiX=0; int dpiY=0; int oldZoom = zoomHandler()->zoom(); bool displayFieldCode = m_pKPresenterDoc->getVariableCollection()->variableSetting()->displayFieldCode(); if ( displayFieldCode ) { m_pKPresenterDoc->getVariableCollection()->variableSetting()->setDisplayFieldCode(false); m_pKPresenterDoc->recalcVariables( VT_ALL ); } TQPaintDeviceMetrics metrics( &prt ); unZoomDocument(dpiX,dpiY); if ( m_pKPresenterDoc->pageLayout().format == PG_SCREEN ) { left_margin = 28.5; top_margin = 15.0; } TQPainter painter; painter.begin( &prt ); TQRect rect = m_pKPresenterDoc->pageList().at( 0 )->getZoomPageRect(); double zoom = TQMIN( double( metrics.width() ) / double( rect.width() ), double( metrics.height() ) / double( rect.height() ) ); double newZoom = zoom * m_pKPresenterDoc->zoomHandler()->zoom(); kdDebug(33001) << "KPrView::print newZoom = " << newZoom << endl; setZoom( int( newZoom ), false ); TQRect paintingRect = m_pKPresenterDoc->pageList().at( 0 )->getZoomPageRect(); m_canvas->print( &painter, &prt, left_margin, top_margin ); painter.end(); zoomDocument(oldZoom); if ( displayFieldCode ) { m_pKPresenterDoc->getVariableCollection()->variableSetting()->setDisplayFieldCode(true); m_pKPresenterDoc->recalcVariables( VT_ALL ); } m_canvas->tqrepaint(); kdDebug(33001) << "KPrView::print zoom&res reset" << endl; m_pKPresenterDoc->getVariableCollection()->variableSetting()->setLastPrintingDate(TQDateTime::tqcurrentDateTime()); m_pKPresenterDoc->recalcVariables( VT_DATE ); } void KPrView::editCut() { if ( !m_canvas->currentTextObjectView() ) { m_canvas->setToolEditMode( TEM_MOUSE ); #if COPYOASISFORMAT m_canvas->copyOasisObjs(); #else m_canvas->copyObjs(); #endif m_canvas->deleteObjs(); } else { if ( !m_canvas->currentTextObjectView()->kpTextObject()->isProtectContent()) m_canvas->currentTextObjectView()->cut(); } } void KPrView::editCopy() { if ( !m_canvas->currentTextObjectView() ) { m_canvas->setToolEditMode( TEM_MOUSE ); #if COPYOASISFORMAT m_canvas->copyOasisObjs(); #else m_canvas->copyObjs(); #endif } else m_canvas->currentTextObjectView()->copy(); } void KPrView::editPaste() { if ( !m_canvas->currentTextObjectView() ) { m_canvas->setToolEditMode( TEM_MOUSE ); deSelectAllObjects(); TQMimeSource *data = TQApplication::tqclipboard()->data(); if ( data->provides( "text/uri-list" ) ) { m_pKPresenterDoc->pastePage( data, currPg ); setRanges(); skipToPage( currPg ); updateSideBarMenu(); } else if ( data->provides( KoStoreDrag::mimeType("application/x-kpresenter" ) )) { // TODO: it would be nice to have no offset when pasting onto a different page... m_canvas->activePage()->pasteObjs( data->tqencodedData(KoStoreDrag::mimeType("application/x-kpresenter")), 1, 0.0, 0.0, 0.0, 20.0, 20.0); m_canvas->setMouseSelectedObject(true); emit objectSelectedChanged(); } #if COPYOASISFORMAT else if ( data->provides( KoStoreDrag::mimeType("application/vnd.oasis.opendocument.presentation" ) )) { //TODO : fix me !! // TODO: it would be nice to have no offset when pasting onto a different page... //m_canvas->activePage()->pasteObjs( //data->tqencodedData(KoStoreDrag::mimeType("application/vnd.oasis.opendocument.presentation")), //1, 0.0, 0.0, 0.0, 20.0, 20.0); m_canvas->setMouseSelectedObject(true); emit objectSelectedChanged(); } #endif else if (TQImageDrag::canDecode (data)) { m_canvas->dropImage( data ); } } else { if ( !m_canvas->currentTextObjectView()->kpTextObject()->isProtectContent()) m_canvas->currentTextObjectView()->paste(); } } void KPrView::editDelete() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->deleteObjs(); } void KPrView::editSelectAll() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->selectAllObj(); } else edit->selectAll(); } void KPrView::editDeSelectAll() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) { m_canvas->setToolEditMode( TEM_MOUSE ); deSelectAllObjects(); } else edit->selectAll(false); } void KPrView::editCopyPage() { m_pKPresenterDoc->copyPageToClipboard( currPg ); } void KPrView::editDuplicatePage() { m_pKPresenterDoc->copyPage( currPg ); setRanges(); } void KPrView::updateSideBarMenu() { actionEditDelPage->setEnabled( m_pKPresenterDoc->getPageNums() > 1 ); } void KPrView::editDelPage() { if ( KMessageBox::warningContinueCancel( this, i18n( "Do you want to remove the current slide?"),i18n("Remove Slide"),KGuiItem(i18n("&Delete"),"editdelete") ) != KMessageBox::Continue ) return; m_canvas->exitEditMode(); m_pKPresenterDoc->deletePage( currPg ); setRanges(); } void KPrView::insertPage() { InsertPageDia dia( this, 0, TRUE ); #if COPYOASISFORMAT TQString templ = locateLocal( "data", "kpresenter/default.oop" ); #else TQString templ = locateLocal( "data", "kpresenter/default.kpr" ); #endif if ( !TQFile::exists( templ ) ) { dia.radioDifferent->setChecked( TRUE ); dia.radioDefault->setEnabled( FALSE ); } if ( dia.exec() != TQDialog::Accepted ) return; if (dia.radioCurrentDefault->isChecked()) { #if COPYOASISFORMAT TQString file = locateLocal( "data", "kpresenter/default.oop" ); m_pKPresenterDoc->savePage( file, currPg, true /*ignore stickies*/ ); #else TQString file = locateLocal( "data", "kpresenter/default.kpr" ); m_pKPresenterDoc->savePage( file, currPg, true /*ignore stickies*/ ); #endif } InsertPos pos = (InsertPos)dia.locationCombo->currentItem(); m_pKPresenterDoc->insertNewPage( i18n("Insert new slide"), currPg, pos, dia.radioDifferent->isChecked(), TQString() ); setRanges(); } void KPrView::insertPicture() { m_canvas->setToolEditMode( INS_PICTURE ); deSelectAllObjects(); TQStringList mimetypes; mimetypes += KImageIO::mimeTypes( KImageIO::Reading ); mimetypes += KoPictureFilePreview::clipartMimeTypes(); KFileDialog fd( m_pKPresenterDoc->picturePath(), TQString(), this, 0, true ); fd.setCaption( i18n( "Insert Picture" ) ); fd.setMimeFilter( mimetypes ); fd.setPreviewWidget( new KoPictureFilePreview( &fd ) ); KURL url; if ( fd.exec() == TQDialog::Accepted ) url = fd.selectedURL(); if( url.isEmpty() || !url.isValid() ) { m_canvas->setToolEditMode( TEM_MOUSE, false ); return; } TQString file; if ( !KIO::NetAccess::download( url, file, this ) ) { m_canvas->setToolEditMode( TEM_MOUSE, false ); return; } if ( !file.isEmpty() ) m_canvas->activePage()->setInsPictureFile( file ); } void KPrView::insertPicture(const TQString &file) { m_canvas->setToolEditMode( INS_PICTURE ); deSelectAllObjects(); if ( !file.isEmpty() ) m_canvas->activePage()->setInsPictureFile( file ); } void KPrView::savePicture() { m_canvas->savePicture(); } void KPrView::savePicture( const TQString& oldName, KoPicture& picture) { TQString oldFile(oldName); KURL url; url.setPath( oldFile ); if (!TQDir(url.directory()).exists()) oldFile = url.fileName(); TQString mimetype=picture.getMimeType(); kdDebug(33001) << "Picture has mime type: " << mimetype << endl; TQStringList mimetypes; mimetypes << mimetype; KFileDialog fd( oldFile, TQString(), this, 0, TRUE ); fd.setMimeFilter( mimetypes ); fd.setCaption(i18n("Save Picture")); fd.setOperationMode(KFileDialog::Saving); if ( fd.exec() == TQDialog::Accepted ) { url = fd.selectedURL(); if ( url.isValid() ) { if ( url.isLocalFile() ) { TQFile file( url.path() ); if ( file.open( IO_ReadWrite ) ) { picture.save( TQT_TQIODEVICE(&file) ); file.close(); } else { KMessageBox::error(this, i18n("Error during saving: could not open '%1' for writing.").arg ( url.path() ), i18n("Save Picture")); } } else { KTempFile tempFile; tempFile.setAutoDelete( true ); if ( tempFile.status() == 0 ) { TQFile file( tempFile.name() ); if ( file.open( IO_ReadWrite ) ) { picture.save( TQT_TQIODEVICE(&file) ); file.close(); if ( !KIO::NetAccess::upload( tempFile.name(), url, this ) ) { KMessageBox::sorry( this, i18n( "Unable to save the file to '%1'. %2.").tqarg( url.prettyURL() ).tqarg( KIO::NetAccess::lastErrorString() ), i18n("Save Failed") ); } } else KMessageBox::error(this, i18n("Error during saving: could not open '%1' temporary file for writing.").arg ( file.name() ), i18n("Save Picture")); } else KMessageBox::sorry( this, i18n( "Error during saving: could not create temporary file: %1.").tqarg( strerror( tempFile.status() ) ), i18n("Save Picture") ); } } } } void KPrView::savePicture( KPrPixmapObject* obj ) { TQString oldFile=obj->getFileName(); KoPicture picture(obj->picture()); savePicture(oldFile, picture); } void KPrView::toolsMouse() { if ( actionToolsMouse->isChecked() ) m_canvas->setToolEditMode( TEM_MOUSE, false ); else actionToolsMouse->setChecked(true); //deSelectAllObjects(); } void KPrView::toolsRotate() { if ( actionToolsRotate->isChecked() ) m_canvas->setToolEditMode( TEM_ROTATE, false ); else actionToolsRotate->setChecked(true); } void KPrView::toolsZoom() { if ( actionToolsZoom->isChecked() ) m_canvas->setToolEditMode( TEM_ZOOM, false ); else actionToolsZoom->setChecked(true); } void KPrView::toolsLinePopup() { switch (m_currentLineTool) { case LtLine: actionToolsLine->activate(); break; case LtFreehand: actionToolsFreehand->activate(); break; case LtPolyline: actionToolsPolyline->activate(); break; case LtQuadricBezier: actionToolsQuadricBezierCurve->activate(); break; case LtCubicBezier: actionToolsCubicBezierCurve->activate(); break; } } void KPrView::toolsLine() { if ( actionToolsLine->isChecked() ) { m_canvas->setToolEditMode( INS_LINE, false ); deSelectAllObjects(); m_currentLineTool = LtLine; actionToolsLinePopup->setIcon("line"); } else actionToolsLine->setChecked(true); } void KPrView::toolsShapePopup() { switch (m_currentShapeTool) { case StRectangle: actionToolsRectangle->activate(); break; case StCircle: actionToolsCircleOrEllipse->activate(); break; case StPie: actionToolsPie->activate(); break; case StPolygon: actionToolsConvexOrConcavePolygon->activate(); break; } } void KPrView::toolsRectangle() { if ( actionToolsRectangle->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_RECT, false ); m_currentShapeTool = StRectangle; actionToolsShapePopup->setIcon("rectangle"); } else actionToolsRectangle->setChecked(true); } void KPrView::toolsCircleOrEllipse() { if ( actionToolsCircleOrEllipse->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_ELLIPSE, false ); m_currentShapeTool = StCircle; actionToolsShapePopup->setIcon("circle"); } else actionToolsCircleOrEllipse->setChecked(true); } void KPrView::toolsPie() { if ( actionToolsPie->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_PIE, false ); m_currentShapeTool = StPie; actionToolsShapePopup->setIcon("pie"); } else actionToolsPie->setChecked(true); } void KPrView::toolsDiagramm() { if ( actionToolsDiagramm->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_DIAGRAMM, false ); KoDocumentEntry entry = KoDocumentEntry::queryByMimeType( "application/x-kchart" ); if (entry.isEmpty()) { KMessageBox::sorry( this, i18n( "No chart component registered" ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } else m_canvas->setPartEntry( entry ); } else actionToolsDiagramm->setChecked(true); } void KPrView::toolsTable() { if ( actionToolsTable->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_TABLE, false ); KoDocumentEntry entry = KoDocumentEntry::queryByMimeType( "application/x-kspread" ); if (entry.isEmpty()) { KMessageBox::sorry( this, i18n( "No table component registered" ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } else m_canvas->setPartEntry( entry ); } else actionToolsTable->setChecked(true); } void KPrView::toolsFormula() { if ( actionToolsFormula->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_FORMULA, false ); KoDocumentEntry entry = KoDocumentEntry::queryByMimeType( "application/x-kformula" ); if (entry.isEmpty()) { KMessageBox::sorry( this, i18n( "No formula component registered" ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } else m_canvas->setPartEntry( entry ); } else actionToolsFormula->setChecked(true); } void KPrView::toolsText() { if ( actionToolsText->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( INS_TEXT, false ); } else actionToolsText->setChecked(true); } void KPrView::toolsAutoform() { if ( actionToolsAutoform->isChecked() ) { deSelectAllObjects(); m_canvas->setToolEditMode( TEM_MOUSE, false ); if ( afChoose ) { delete afChoose; afChoose = 0; } afChoose = new AFChoose( this, i18n( "Autoform-Choose" ) ); afChoose->resize( 400, 300 ); afChoose->setCaption( i18n( "Insert Autoform" ) ); TQObject::connect( afChoose, TQT_SIGNAL( formChosen( const TQString & ) ), TQT_TQOBJECT(this), TQT_SLOT( afChooseOk( const TQString & ) ) ); TQObject::connect( afChoose, TQT_SIGNAL( afchooseCanceled()), TQT_TQOBJECT(this), TQT_SLOT(slotAfchooseCanceled())); afChoose->exec(); TQObject::disconnect( afChoose, TQT_SIGNAL( formChosen( const TQString & ) ), TQT_TQOBJECT(this), TQT_SLOT( afChooseOk( const TQString & ) ) ); delete afChoose; afChoose = 0; } else actionToolsAutoform->setChecked(true); } void KPrView::toolsObject() { KoDocumentEntry pe = actionToolsObject->documentEntry(); if ( pe.isEmpty() ) { m_canvas->setToolEditMode( TEM_MOUSE ); return; } m_canvas->setToolEditMode( INS_OBJECT ); m_canvas->setPartEntry( pe ); } void KPrView::toolsFreehand() { if ( actionToolsFreehand->isChecked() ) { m_canvas->setToolEditMode( INS_FREEHAND, false ); deSelectAllObjects(); m_currentLineTool = LtFreehand; actionToolsLinePopup->setIcon("freehand"); } else actionToolsFreehand->setChecked(true); } void KPrView::toolsPolyline() { if ( actionToolsPolyline->isChecked() ) { m_canvas->setToolEditMode( INS_POLYLINE, false ); deSelectAllObjects(); m_currentLineTool = LtPolyline; actionToolsLinePopup->setIcon("polyline"); } else actionToolsPolyline->setChecked(true); } void KPrView::toolsQuadricBezierCurve() { if ( actionToolsQuadricBezierCurve->isChecked() ) { m_canvas->setToolEditMode( INS_TQUADRICBEZIERCURVE, false ); deSelectAllObjects(); m_currentLineTool = LtQuadricBezier; actionToolsLinePopup->setIcon("quadricbeziercurve"); } else actionToolsQuadricBezierCurve->setChecked(true); } void KPrView::toolsCubicBezierCurve() { if ( actionToolsCubicBezierCurve->isChecked() ) { m_canvas->setToolEditMode( INS_CUBICBEZIERCURVE, false ); deSelectAllObjects(); m_currentLineTool = LtCubicBezier; actionToolsLinePopup->setIcon("cubicbeziercurve"); } else actionToolsCubicBezierCurve->setChecked(true); } void KPrView::toolsConvexOrConcavePolygon() { if ( actionToolsConvexOrConcavePolygon->isChecked() ) { m_canvas->setToolEditMode( INS_POLYGON, false ); deSelectAllObjects(); m_currentShapeTool = StPolygon; actionToolsShapePopup->setIcon("polygon"); } else actionToolsConvexOrConcavePolygon->setChecked(true); } void KPrView::toolsClosedLinePopup() { switch (m_currentClosedLineTool) { case CltFreehand: actionToolsClosedFreehand->activate(); break; case CltPolyline: actionToolsClosedPolyline->activate(); break; case CltQuadricBezier: actionToolsClosedQuadricBezierCurve->activate(); break; case CltCubicBezier: actionToolsClosedCubicBezierCurve->activate(); break; } } void KPrView::toolsClosedFreehand() { if ( actionToolsClosedFreehand->isChecked() ) { m_canvas->setToolEditMode( INS_CLOSED_FREEHAND, false ); deSelectAllObjects(); m_currentClosedLineTool = CltFreehand; actionToolsClosedLinePopup->setIcon("closed_freehand"); } else actionToolsClosedFreehand->setChecked( true ); } void KPrView::toolsClosedPolyline() { if ( actionToolsClosedPolyline->isChecked() ) { m_canvas->setToolEditMode( INS_CLOSED_POLYLINE, false ); deSelectAllObjects(); m_currentClosedLineTool = CltPolyline; actionToolsClosedLinePopup->setIcon("closed_polyline"); } else actionToolsClosedPolyline->setChecked( true ); } void KPrView::toolsClosedQuadricBezierCurve() { if ( actionToolsClosedQuadricBezierCurve->isChecked() ) { m_canvas->setToolEditMode( INS_CLOSED_TQUADRICBEZIERCURVE, false ); deSelectAllObjects(); m_currentClosedLineTool = CltQuadricBezier; actionToolsClosedLinePopup->setIcon("closed_quadricbeziercurve"); } else actionToolsClosedQuadricBezierCurve->setChecked( true ); } void KPrView::toolsClosedCubicBezierCurve() { if ( actionToolsClosedCubicBezierCurve->isChecked() ) { m_canvas->setToolEditMode( INS_CLOSED_CUBICBEZIERCURVE, false ); deSelectAllObjects(); m_currentClosedLineTool = CltCubicBezier; actionToolsClosedLinePopup->setIcon("closed_cubicbeziercurve"); } else actionToolsClosedCubicBezierCurve->setChecked( true ); } void KPrView::extraProperties() { m_canvas->setToolEditMode( TEM_MOUSE ); m_propertyEditor = new KPrPropertyEditor( this, "KPrPropertyEditor", m_canvas->activePage(), m_pKPresenterDoc ); m_propertyEditor->setCaption( i18n( "Properties" ) ); connect( m_propertyEditor, TQT_SIGNAL( propertiesOk() ), TQT_TQOBJECT(this), TQT_SLOT( propertiesOk() ) ); m_propertyEditor->exec(); disconnect( m_propertyEditor, TQT_SIGNAL( propertiesOk() ), TQT_TQOBJECT(this), TQT_SLOT( propertiesOk() ) ); delete m_propertyEditor; m_propertyEditor = 0; } void KPrView::extraRaise() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->raiseObjs( true ); } void KPrView::extraLower() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->lowerObjs( true ); } void KPrView::extraRotate() { if ( m_canvas->numberOfObjectSelected() > 0 ) { if ( !rotateDia ) { rotateDia = new KPrRotationDialogImpl( this ); connect( rotateDia, TQT_SIGNAL( apply() ), TQT_TQOBJECT(this), TQT_SLOT( rotateOk() ) ); } rotateDia->setAngle( m_canvas->getSelectedObj()->getAngle() ); m_canvas->setToolEditMode( TEM_MOUSE ); rotateDia->exec(); } } void KPrView::extraShadow() { if ( m_canvas->numberOfObjectSelected() > 0 ) { if ( !shadowDia ) { shadowDia = new KPrShadowDialogImpl( this ); shadowDia->resize( shadowDia->tqminimumSize() ); connect( shadowDia, TQT_SIGNAL( apply() ), TQT_TQOBJECT(this), TQT_SLOT( shadowOk() ) ); } KPrObject *object=m_canvas->getSelectedObj(); shadowDia->setShadowDirection( object->getShadowDirection() ); if ( object->getShadowDistance() != 0 ) shadowDia->setShadowDistance( object->getShadowDistance() ); else shadowDia->setShadowDistance( 3 ); shadowDia->setShadowColor( object->getShadowColor() ); m_canvas->setToolEditMode( TEM_MOUSE ); shadowDia->exec(); } } void KPrView::extraBackground() { KPrPage *page=m_canvas->activePage(); KPrBackDialog* backDia = new KPrBackDialog( this, "InfoDia", page->getBackType( ), page->getBackColor1( ), page->getBackColor2( ), page->getBackColorType( ), page->getBackPicture( ), page->getBackView(), page->getBackUnbalanced(), page->getBackXFactor(), page->getBackYFactor( ), page ); backDia->setCaption( i18n( "Slide Background" ) ); TQObject::connect( backDia, TQT_SIGNAL( backOk( KPrBackDialog*, bool ) ), TQT_TQOBJECT(this), TQT_SLOT( backOk( KPrBackDialog*, bool ) ) ) ; backDia->exec(); TQObject::disconnect( backDia, TQT_SIGNAL( backOk( KPrBackDialog*, bool ) ), TQT_TQOBJECT(this), TQT_SLOT( backOk( KPrBackDialog*, bool ) ) ); delete backDia; } void KPrView::extraLayout() { KoPageLayout pgLayout = m_pKPresenterDoc->pageLayout(); KoPageLayout oldLayout = pgLayout; KoHeadFoot hf; KoUnit::Unit oldUnit = m_pKPresenterDoc->unit(); KoUnit::Unit unit = oldUnit; if ( KoPageLayoutDia::pageLayout( pgLayout, hf, FORMAT_AND_BORDERS, unit, this ) ) { KPrPgLayoutCmd *pgLayoutCmd = new KPrPgLayoutCmd( i18n( "Set Page Layout" ), pgLayout, oldLayout, oldUnit, unit,kPresenterDoc() ); pgLayoutCmd->execute(); kPresenterDoc()->addCommand( pgLayoutCmd ); updateRuler(); } } void KPrView::extraConfigure() { KPrConfig configDia( this ); configDia.exec(); } void KPrView::extraCreateTemplate() { int width = 60; int height = 60; TQPixmap pix = m_pKPresenterDoc->generatePreview(TQSize(width, height)); #if COPYOASISFORMAT KTempFile tempFile( TQString(), ".otp" ); tempFile.setAutoDelete( true ); m_pKPresenterDoc->savePage( tempFile.name(), getCurrPgNum() - 1); #else KTempFile tempFile( TQString(), ".kpt" ); tempFile.setAutoDelete( true ); m_pKPresenterDoc->savePage( tempFile.name(), getCurrPgNum() - 1); #endif KoTemplateCreateDia::createTemplate( "kpresenter_template", KPrFactory::global(), tempFile.name(), pix, this); KPrFactory::global()->dirs()->addResourceType("kpresenter_template", KStandardDirs::kde_default( "data" ) + "kpresenter/templates/"); } void KPrView::extraDefaultTemplate() { #if COPYOASISFORMAT TQString file = locateLocal( "data", "kpresenter/default.oop" ); m_pKPresenterDoc->savePage( file, currPg ); #else TQString file = locateLocal( "data", "kpresenter/default.kpr" ); m_pKPresenterDoc->savePage( file, currPg ); #endif } void KPrView::extraWebPres() { if ( !allowWebPres ) return; KURL url; TQString config = TQString(); int ret =KMessageBox::questionYesNoCancel( this, i18n( "Do you want to load a previously saved configuration" " which will be used for this HTML Presentation?" ), i18n( "Create HTML Presentation" ) ); if( ret == KMessageBox::Cancel ) return; else if ( ret == KMessageBox::Yes ) { url = KFileDialog::getOpenURL( TQString(), i18n("*.kpweb|KPresenter HTML Presentation (*.kpweb)"), this ); if( url.isEmpty() ) return; if( !url.isLocalFile() ) { KMessageBox::sorry( this, i18n( "Only local files are currently supported." ) ); return; } config = url.path(); } KPrWebPresentationWizard::createWebPresentation( config, m_pKPresenterDoc, this ); } void KPrView::extraMSPres() { if ( !allowMSPres ) return; KPrMSPresentationSetup::createMSPresentation( m_pKPresenterDoc, this ); } void KPrView::extraLineBegin() { m_canvas->setToolEditMode( TEM_MOUSE ); TQPoint pnt( TQCursor::pos() ); rb_lbegin->popup( pnt ); } void KPrView::extraLineEnd() { m_canvas->setToolEditMode( TEM_MOUSE ); TQPoint pnt( TQCursor::pos() ); rb_lend->popup( pnt ); } void KPrView::extraGroup() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->groupObjects(); objectSelectedChanged(); } void KPrView::extraUnGroup() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->ungroupObjects(); objectSelectedChanged(); } void KPrView::extraPenStyle( int newStyle ) { m_canvas->setToolEditMode( TEM_MOUSE ); setExtraPenStyle(static_cast(newStyle)); } void KPrView::extraPenWidth( double newWidth ) { m_canvas->setToolEditMode( TEM_MOUSE ); setExtraPenWidth( newWidth ); } void KPrView::screenConfigPages() { delete pgConfDia; pgConfDia = new KPrPgConfDia( this, kPresenterDoc() ); pgConfDia->setCaption( i18n( "Configure Slide Show" ) ); TQObject::connect( pgConfDia, TQT_SIGNAL( pgConfDiaOk() ), TQT_TQOBJECT(this), TQT_SLOT( pgConfOk() ) ); pgConfDia->exec(); TQObject::disconnect( pgConfDia, TQT_SIGNAL( pgConfDiaOk() ), TQT_TQOBJECT(this), TQT_SLOT( pgConfOk() ) ); delete pgConfDia; pgConfDia = 0; } void KPrView::screenTransEffect() { KPrSlideTransitionDia transitionDia( this, "slideTransitionDialog", this ); transitionDia.exec(); } void KPrView::screenAssignEffect() { m_canvas->setToolEditMode( TEM_MOUSE ); TQPtrList objs; if ( m_canvas->canAssignEffect( objs ) ) { KPrEffectDia *effectDia = new KPrEffectDia( this, "Object Effect", objs, this ); effectDia->setCaption( i18n( "Object Effect" ) ); effectDia->exec(); //the dialog executes the command itself delete effectDia; } } void KPrView::screenStart() { startScreenPres( getCurrPgNum() ); } void KPrView::screenStartFromFirst() { startScreenPres( 1 ); } void KPrView::startScreenPres( int pgNum /*1-based*/ ) { // no slide is selected ? if( !kPresenterDoc()->displaySelectedSlides().count() ) { KMessageBox::sorry( this, i18n("You didn't select any slide." ), i18n("No Slide") ); return; } m_canvas->setToolEditMode( TEM_MOUSE ); if ( m_canvas && !presStarted ) { const TQString xdgScreenSaver = KStandardDirs::findExe("xdg-screensaver"); if (!xdgScreenSaver.isEmpty()) { KProcess proc; proc << xdgScreenSaver; proc << "suspend"; proc << TQString::number( tqtopLevelWidget()->winId() ); kdDebug() << k_funcinfo << proc.args() << endl; proc.start( KProcess::DontCare ); } else { TQByteArray data; TQByteArray replyData; TQCString replyType; m_screenSaverWasEnabled = false; // is screensaver enabled? if (kapp->dcopClient()->call("kdesktop", "KScreensaverIface", "isEnabled()", data, replyType, replyData) && replyType=="bool") { TQDataStream replyArg(replyData, IO_ReadOnly); replyArg >> m_screenSaverWasEnabled; kdDebug() << "Screensaver was enabled:" << m_screenSaverWasEnabled << endl; if ( m_screenSaverWasEnabled ) { // disable screensaver TQDataStream arg(data, IO_WriteOnly); arg << false; if (!kapp->dcopClient()->send("kdesktop", "KScreensaverIface", "enable(bool)", data)) kdWarning(33001) << "Couldn't disable screensaver (using dcop to kdesktop)!" << endl; else kdDebug(33001) << "Screensaver successfully disabled" << endl; } } else { kdWarning(33001) << "Couldn't check screensaver (using dcop to kdesktop)!" << endl; } // is DPMS enabled? m_dpmsWasEnabled = isDPMSEnabled(); kdDebug() << "DPMS was enabled:" << m_dpmsWasEnabled << endl; if ( m_dpmsWasEnabled ) { enableDPMS( false ); } } deSelectAllObjects(); presStarted = true; m_autoPresRestart = false; TQRect desk = KGlobalSettings::desktopGeometry(this); kdDebug(33001) << "KPrView::startScreenPres desk=" << desk << endl; TQRect pgRect = kPresenterDoc()->pageList().at(0)->getZoomPageRect(); kdDebug(33001) << "KPrView::startScreenPres pgRect=" << pgRect << endl; double zoomX = static_cast( desk.width() ) / (double)pgRect.width(); double zoomY = static_cast( desk.height() ) / (double)pgRect.height(); kdDebug(33001) << "KPrView::startScreenPres zoomX=" << zoomX << " zoomY=" << zoomY << endl; xOffsetSaved = canvasXOffset(); yOffsetSaved = canvasYOffset(); setCanvasXOffset( 0 ); setCanvasYOffset( 0 ); m_bDisplayFieldCode = m_pKPresenterDoc->getVariableCollection()->variableSetting()->displayFieldCode(); if ( m_bDisplayFieldCode ) { m_pKPresenterDoc->getVariableCollection()->variableSetting()->setDisplayFieldCode(false); m_pKPresenterDoc->recalcVariables( VT_ALL ); } vert->setEnabled( false ); horz->setEnabled( false ); m_bShowGUI = false; m_canvas->reparent( ( TQWidget* )0L, 0, TQPoint( 0, 0 ), FALSE ); m_canvas->setPaletteBackgroundColor( TQt::white ); m_canvas->showFullScreen(); m_canvas->setFocusPolicy( TQ_StrongFocus ); if ( !kPresenterDoc()->spManualSwitch() ) { m_autoPresStop = false; m_pKPresenterDoc->tqrepaint( false ); if ( ! m_autoPresTimerConnected ) { connect( &m_autoPresTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( doAutomaticScreenPres() ) ); m_autoPresTimerConnected = true; } } m_canvas->startScreenPresentation( zoomX, zoomY, pgNum ); actionScreenStart->setEnabled( false ); if ( kPresenterDoc()->presentationDuration() ) { m_duration.start(); // ### make m_presentationDurationList a TQMemArray or TQValueVector for ( unsigned int i = 0; i < kPresenterDoc()->pageList().count(); ++i ) m_presentationDurationList.append( 0 ); // initialization } } } void KPrView::screenStop() { if ( presStarted ) { m_autoPresStop = true; m_canvas->stopSound(); m_canvas->showNormal(); m_canvas->hide(); m_canvas->reparent( pageBase, 0, TQPoint( 0, 0 ), true ); m_canvas->lower(); setCanvasXOffset( xOffsetSaved ); setCanvasYOffset( yOffsetSaved ); if ( m_bDisplayFieldCode ) { m_pKPresenterDoc->getVariableCollection()->variableSetting()->setDisplayFieldCode(true); m_pKPresenterDoc->recalcVariables( VT_ALL ); } m_canvas->stopScreenPresentation(); presStarted = false; vert->setEnabled( true ); horz->setEnabled( true ); m_bShowGUI = true; m_canvas->setMouseTracking( true ); m_canvas->setBackgroundMode( TQt::NoBackground ); const TQString xdgScreenSaver = KStandardDirs::findExe("xdg-screensaver"); if (!xdgScreenSaver.isEmpty()) { KProcess proc; proc << xdgScreenSaver; proc << "resume"; proc << TQString::number( tqtopLevelWidget()->winId() ); kdDebug() << k_funcinfo << proc.args() << endl; proc.start( KProcess::DontCare ); } else { if ( m_screenSaverWasEnabled ) { // start screensaver again TQByteArray data; TQDataStream arg(data, IO_WriteOnly); arg << true; if (!kapp->dcopClient()->send("kdesktop", "KScreensaverIface", "enable(bool)", data)) kdWarning(33001) << "Couldn't re-enabled screensaver (using dcop to kdesktop)" << endl; } if ( m_dpmsWasEnabled ) { // re-enable DPMS kdDebug(33001) << "Re-enabling DPMS" << endl; enableDPMS( true ); } } actionScreenStart->setEnabled( true ); pageBase->resizeEvent( 0 ); if ( kPresenterDoc()->presentationDuration() && !m_presentationDurationList.isEmpty() ) { openThePresentationDurationDialog(); m_presentationDurationList.clear(); } } emit presentationFinished(); } void KPrView::screenPause() { } void KPrView::screenFirst() { m_canvas->deSelectAllObj(); if ( !presStarted ) skipToPage( 0 ); else gotoPresPage( 1 ); } void KPrView::screenPrev( bool gotoPreviousPage ) { if ( m_canvas->currentTextObjectView() ) return; if ( presStarted ) { m_canvas->pPrev( gotoPreviousPage ); m_canvas->setFocus(); } else prevPage(); } void KPrView::screenNext( bool gotoNextPage ) { if ( m_canvas->currentTextObjectView() ) return; if ( presStarted ) { m_canvas->pNext( gotoNextPage ); m_canvas->setFocus(); } else { nextPage(); } } void KPrView::screenLast() { m_canvas->deSelectAllObj(); if ( !presStarted ) skipToPage( m_pKPresenterDoc->getPageNums() - 1 ); else gotoPresPage( getNumPresPages() ); } void KPrView::screenSkip() { } void KPrView::sizeSelected( int size ) { tbFont.setPointSize( size ); m_canvas->setTextPointSize( size ); m_canvas->setFocus(); } void KPrView::fontSelected( const TQString &fontFamily ) { tbFont.setFamily( fontFamily ); m_canvas->setTextFamily( fontFamily ); m_canvas->setFocus(); } void KPrView::textBold() { bool b=actionTextBold->isChecked(); tbFont.setBold( b ); m_canvas->setTextBold(b ); } void KPrView::textStrikeOut() { bool b=actionFormatStrikeOut->isChecked(); tbFont.setStrikeOut( b ); m_canvas->setTextStrikeOut( b ); } void KPrView::textItalic() { bool b=actionTextItalic->isChecked(); tbFont.setItalic( b ); m_canvas->setTextItalic( b ); } void KPrView::textUnderline() { bool b=actionTextUnderline->isChecked(); tbFont.setUnderline( b ); m_canvas->setTextUnderline( b ); } void KPrView::textColor() { tbColor = actionTextColor->color(); m_canvas->setTextColor( tbColor ); } void KPrView::textAlignLeft() { if ( actionTextAlignLeft->isChecked() ) { tbAlign = TQt::AlignLeft; m_canvas->setTextAlign( tbAlign ); } else actionTextAlignLeft->setChecked(true); } void KPrView::textAlignCenter() { if ( actionTextAlignCenter->isChecked() ) { tbAlign = TQt::AlignHCenter; m_canvas->setTextAlign(tbAlign); } else actionTextAlignCenter->setChecked(true); } void KPrView::textAlignRight() { if ( actionTextAlignRight->isChecked() ) { tbAlign = TQt::AlignRight; m_canvas->setTextAlign(tbAlign); } else actionTextAlignRight->setChecked(true); } void KPrView::textAlignBlock() { if ( actionTextAlignBlock->isChecked() ) { tbAlign = TQt::AlignJustify; m_canvas->setTextAlign(tbAlign); } else actionTextAlignBlock->setChecked(true); } void KPrView::textInsertPageNum() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->insertVariable( VT_PGNUM, KoPageVariable::VST_PGNUM_CURRENT ); } void KPrView::mtextFont() { KoTextFormatInterface* textIface = m_canvas->applicableTextInterfaces().first(); TQColor col; if (textIface) col = textIface->textBackgroundColor(); col = col.isValid() ? col : TQApplication::palette().color( TQPalette::Active, TQColorGroup::Base ); delete m_fontDlg; m_fontDlg = new KoFontDia( *textIface->currentFormat() , m_broker , this, 0 ); connect( m_fontDlg, TQT_SIGNAL( applyFont() ), TQT_TQOBJECT(this), TQT_SLOT( slotApplyFont() ) ); m_fontDlg->exec(); delete m_fontDlg; m_fontDlg=0L; } void KPrView::slotApplyFont() { int flags = m_fontDlg->changedFlags(); if ( flags ) { m_canvas->setTextFormat(m_fontDlg->newFormat(), flags); } } void KPrView::slotCounterStyleSelected() { TQString actionName = TQString::tqfromLatin1(TQT_TQOBJECT(const_cast(sender()))->name()); if ( actionName.startsWith( "counterstyle_" ) ) { TQString styleStr = actionName.mid(13); //kdDebug(33001) << "KWView::slotCounterStyleSelected styleStr=" << styleStr << endl; KoParagCounter::Style style = (KoParagCounter::Style)(styleStr.toInt()); KoParagCounter c; if ( style == KoParagCounter::STYLE_NONE ) c.setNumbering( KoParagCounter::NUM_NONE ); else { c.setNumbering( KoParagCounter::NUM_LIST ); c.setStyle( style ); if ( c.isBullet() ) c.setSuffix( TQString() ); // else the suffix remains the default, '.' // TODO save this setting, to use the last one selected in the dialog? // (same for custom bullet char etc.) // 68927: restart numbering, by default, if last parag wasn't numbered // (and if we're not applying this to a selection) KPrTextView *edit = m_canvas->currentTextObjectView(); if ( edit && !edit->textObject()->hasSelection() ) { KoTextParag* parag = edit->cursor()->parag(); if ( parag->prev() && !parag->prev()->counter() ) c.setRestartCounter(true); } } TQPtrList lst = m_canvas->applicableTextInterfaces(); TQPtrListIterator it( lst ); KMacroCommand* macroCmd = 0L; for ( ; it.current() ; ++it ) { KCommand *cmd = it.current()->setCounterCommand( c ); if ( cmd ) { if ( !macroCmd ) macroCmd = new KMacroCommand( i18n("Change List Type") ); macroCmd->addCommand( cmd ); } } if( macroCmd) m_pKPresenterDoc->addCommand( macroCmd ); } } void KPrView::textDepthPlus() { m_canvas->setTextDepthPlus(); } void KPrView::textDepthMinus() { m_canvas->setTextDepthMinus(); } void KPrView::textContentsToHeight() { m_canvas->textContentsToHeight(); } void KPrView::textObjectToContents() { m_canvas->textObjectToContents(); } void KPrView::penChosen() { TQColor c = actionPenColor->color(); if ( !m_canvas->currentTextObjectView() ) { KCommand * cmd( getPenCmd( i18n( "Change Outline Color" ), KoPen(c), L_NORMAL, L_NORMAL, KoPenCmd::Color ) ); if( cmd ) m_pKPresenterDoc->addCommand( cmd ); else pen.setColor( c ); } else { tbColor = c; m_canvas->setTextColor( tbColor ); } } void KPrView::brushChosen() { TQColor c = actionBrushColor->color(); KPrTextView *edit = m_canvas->currentTextObjectView(); if ( !edit ) { //tz TODO remove macro, add parameter for command name in setBrush() KMacroCommand * macro= NULL; KCommand * cmd = NULL; TQBrush newBrush( c ); cmd = m_canvas->activePage()->setBrush( newBrush, FT_BRUSH, TQColor(), TQColor(), BCT_PLAIN, false, 0, 0, KPrBrushCmd::BrushColor | KPrBrushCmd::BrushStyle | KPrBrushCmd::BrushGradientSelect ); if( cmd ) { if ( !macro ) macro = new KMacroCommand( i18n( "Change Fill Color" ) ); macro->addCommand( cmd ); } if( macro ) m_pKPresenterDoc->addCommand( macro ); else brush.setColor( c ); } else { tbColor = c; m_canvas->setTextBackgroundColor( c ); } } void KPrView::extraAlignObjLeft() { m_canvas->alignObjects( AT_LEFT ); } void KPrView::extraAlignObjCenterH() { m_canvas->alignObjects( AT_HCENTER ); } void KPrView::extraAlignObjRight() { m_canvas->alignObjects( AT_RIGHT ); } void KPrView::extraAlignObjTop() { m_canvas->alignObjects( AT_TOP ); } void KPrView::extraAlignObjCenterV() { m_canvas->alignObjects( AT_VCENTER ); } void KPrView::extraAlignObjBottom() { m_canvas->alignObjects( AT_BOTTOM ); } void KPrView::extraLineBeginNormal() { setExtraLineBegin(L_NORMAL); } void KPrView::extraLineBeginArrow() { setExtraLineBegin(L_ARROW); } void KPrView::extraLineBeginRect() { setExtraLineBegin(L_SQUARE); } void KPrView::extraLineBeginCircle() { setExtraLineBegin(L_CIRCLE); } void KPrView::extraLineBeginLineArrow() { setExtraLineBegin( L_LINE_ARROW ); } void KPrView::extraLineBeginDimensionLine() { setExtraLineBegin( L_DIMENSION_LINE ); } void KPrView::extraLineBeginDoubleArrow() { setExtraLineBegin( L_DOUBLE_ARROW ); } void KPrView::extraLineBeginDoubleLineArrow() { setExtraLineBegin( L_DOUBLE_LINE_ARROW ); } void KPrView::setExtraLineBegin(LineEnd lb) { KCommand * cmd( getPenCmd( i18n("Change Line Begin"), KoPen(), lb, L_NORMAL, KoPenCmd::LineBegin ) ); if( cmd ) kPresenterDoc()->addCommand( cmd ); else lineBegin = lb; } void KPrView::extraLineEndNormal() { setExtraLineEnd(L_NORMAL); } void KPrView::extraLineEndArrow() { setExtraLineEnd(L_ARROW); } void KPrView::extraLineEndRect() { setExtraLineEnd(L_SQUARE); } void KPrView::extraLineEndCircle() { setExtraLineEnd(L_CIRCLE); } void KPrView::extraLineEndLineArrow() { setExtraLineEnd( L_LINE_ARROW ); } void KPrView::extraLineEndDimensionLine() { setExtraLineEnd( L_DIMENSION_LINE ); } void KPrView::extraLineEndDoubleArrow() { setExtraLineEnd( L_DOUBLE_ARROW ); } void KPrView::extraLineEndDoubleLineArrow() { setExtraLineEnd( L_DOUBLE_LINE_ARROW ); } void KPrView::setExtraLineEnd(LineEnd le) { KCommand * cmd( getPenCmd( i18n("Change Line End"), KoPen(), L_NORMAL, le, KoPenCmd::LineEnd ) ); if( cmd ) kPresenterDoc()->addCommand( cmd ); else lineEnd = le; } void KPrView::setExtraPenStyle( Qt::PenStyle style ) { KoPen tmpPen; tmpPen.setStyle( style ); KCommand * cmd( getPenCmd( i18n("Change Outline Style"), tmpPen, L_NORMAL, L_NORMAL, KoPenCmd::Style ) ); if( cmd ) kPresenterDoc()->addCommand( cmd ); else pen.setStyle( style ); } void KPrView::setExtraPenWidth( double width ) { KoPen tmpPen; tmpPen.setPointWidth( width ); KCommand * cmd( getPenCmd( i18n("Change Outline Width"), tmpPen, L_NORMAL, L_NORMAL, KoPenCmd::Width ) ); if( cmd ) kPresenterDoc()->addCommand( cmd ); else pen.setPointWidth( width ); } void KPrView::newPageLayout( const KoPageLayout &_layout ) { KoPageLayout oldLayout = m_pKPresenterDoc->pageLayout(); KoUnit::Unit unit = m_pKPresenterDoc->unit(); // unchanged KPrPgLayoutCmd *pgLayoutCmd = new KPrPgLayoutCmd( i18n( "Set Page Layout" ), _layout, oldLayout, unit, unit,kPresenterDoc() ); pgLayoutCmd->execute(); kPresenterDoc()->addCommand( pgLayoutCmd ); updateRuler(); } void KPrView::updateRuler() { //update koruler TQRect r=m_canvas->activePage()->getZoomPageRect(); getHRuler()->setFrameStartEnd( r.left(), r.right()/*+m_canvas->diffx()*/ ); getVRuler()->setFrameStartEnd( r.top(), r.bottom()/*+m_canvas->diffy()*/ ); } void KPrView::createGUI() { splitter = new TQSplitter( this ); if ( !m_pKPresenterDoc->isEmbedded() && !m_pKPresenterDoc->isSingleViewMode() ) // No sidebar if the document is embedded { sidebar = new KPrSideBar( splitter, m_pKPresenterDoc, this ); connect( sidebar, TQT_SIGNAL( movePage( int, int ) ), m_pKPresenterDoc, TQT_SLOT( movePage( int, int ) ) ); connect( sidebar, TQT_SIGNAL( selectPage( int, bool ) ), m_pKPresenterDoc, TQT_SLOT( selectPage( int, bool ) ) ); connect( sidebar, TQT_SIGNAL( showPage( int ) ), TQT_TQOBJECT(this), TQT_SLOT( skipToPage( int ) ) ); // This sucks when resizing the window //splitter->setResizeMode( sidebar, TQSplitter::FollowSizeHint ); //splitter->setResizeMode( pageBase, TQSplitter::Stretch ); splitter->setResizeMode( sidebar, TQSplitter::KeepSize ); } TQSplitter *splitterVertical = new TQSplitter( Qt::Vertical, splitter ); // setup page pageBase = new PageBase( splitterVertical, this ); pageBase->tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Expanding ) ); m_canvas=new KPrCanvas( pageBase, "Canvas", this ); TQObject::connect( m_canvas, TQT_SIGNAL( fontChanged( const TQFont & ) ), TQT_TQOBJECT(this), TQT_SLOT( fontChanged( const TQFont & ) ) ); TQObject::connect( m_canvas, TQT_SIGNAL( colorChanged( const TQColor & ) ), TQT_TQOBJECT(this), TQT_SLOT( colorChanged( const TQColor & ) ) ); TQObject::connect( m_canvas, TQT_SIGNAL( alignChanged( int ) ), TQT_TQOBJECT(this), TQT_SLOT( alignChanged( int ) ) ); TQObject::connect( m_canvas, TQT_SIGNAL( objectSelectedChanged()), TQT_TQOBJECT(this), TQT_SLOT( objectSelectedChanged())); TQObject::connect( m_canvas, TQT_SIGNAL( sigMouseWheelEvent( TQWheelEvent* ) ), TQT_TQOBJECT(this), TQT_SLOT( getPageMouseWheelEvent( TQWheelEvent* ) ) ); // setup notebar. if ( !m_pKPresenterDoc->isEmbedded() && !m_pKPresenterDoc->isSingleViewMode() ) // No notebar if the document is embedded { notebar = new KPrNoteBar( splitterVertical, this ); } // setup GUI setupActions(); setupPopupMenus(); setupScrollbars(); setRanges(); setupRulers(); if ( m_pKPresenterDoc && m_canvas ) { TQObject::connect( m_canvas, TQT_SIGNAL( stopAutomaticPresentation() ), TQT_TQOBJECT(this), TQT_SLOT( stopAutomaticPresentation() ) ); TQObject::connect( m_canvas, TQT_SIGNAL( restartPresentation() ), TQT_TQOBJECT(this), TQT_SLOT( restartPresentation() ) ); connect( getVRuler(), TQT_SIGNAL( addGuide( const TQPoint &, bool, int ) ), &( m_canvas->guideLines() ), TQT_SLOT( addGuide( const TQPoint &, bool, int ) ) ); connect( getVRuler(), TQT_SIGNAL( moveGuide( const TQPoint &, bool, int ) ), &( m_canvas->guideLines() ), TQT_SLOT( moveGuide( const TQPoint &, bool, int ) ) ); connect( getHRuler(), TQT_SIGNAL( addGuide( const TQPoint &, bool, int ) ), &( m_canvas->guideLines() ), TQT_SLOT( addGuide( const TQPoint &, bool, int ) ) ); connect( getHRuler(), TQT_SIGNAL( moveGuide( const TQPoint &, bool, int ) ), &( m_canvas->guideLines() ), TQT_SLOT( moveGuide( const TQPoint &, bool, int ) ) ); connect( &( m_canvas->guideLines() ), TQT_SIGNAL( moveGuides( bool ) ), m_canvas, TQT_SLOT( setPaintGuides( bool ) ) ); connect( &( m_canvas->guideLines() ), TQT_SIGNAL( paintGuides( bool ) ), m_canvas, TQT_SLOT( setPaintGuides( bool ) ) ); connect( &( m_canvas->guideLines() ), TQT_SIGNAL( guideLinesChanged( KoView * ) ), m_pKPresenterDoc, TQT_SLOT( slotGuideLinesChanged( KoView * ) ) ); m_canvas->guideLines().setGuideLines( m_pKPresenterDoc->horizontalGuideLines(), m_pKPresenterDoc->verticalGuideLines() ); } if ( sidebar ) { sidebar->outline()->setCurrentItem( sidebar->outline()->firstChild() ); sidebar->outline()->setSelected( sidebar->outline()->firstChild(), TRUE ); KConfig *config=KGlobal::config(); config->setGroup("Global"); if(!config->readBoolEntry("Sidebar", true)) { sidebar->hide(); actionViewShowSideBar->setChecked(false); } else actionViewShowSideBar->setChecked(true); } if ( notebar ) { KConfig *config=KGlobal::config(); config->setGroup("Global"); if(!config->readBoolEntry("Notebar", true)) { notebar->hide(); actionViewShowNoteBar->setChecked(false); } else actionViewShowNoteBar->setChecked(true); // HACK This is needed to be able to calculate a good initial size for the notebar TQTimer::singleShot( 0, TQT_TQOBJECT(this), TQT_SLOT( initialLayoutOfSplitter() ) ); } KPrPage *initPage=m_pKPresenterDoc->initialActivePage(); if ( !initPage ) m_pKPresenterDoc->pageList().at( 0 ); // first page skipToPage( m_pKPresenterDoc->pageList().tqfindRef( initPage ) ); } void KPrView::initGui() { tbColor = TQt::black; actionTextColor->setCurrentColor( TQt::black ); actionBrushColor->setCurrentColor( TQt::white ); actionPenColor->setCurrentColor( TQt::black ); updateSideBarMenu(); objectSelectedChanged(); refreshPageButton(); KStatusBar * sb = statusBar(); if ( sb ) sb->show(); showZoom( zoomHandler()->zoom() ); updateHeaderFooterButton(); updateDisplayObjectMasterPageButton(); updateDisplayBackgroundButton(); actionAllowAutoFormat->setChecked( m_pKPresenterDoc->allowAutoFormat() ); actionViewFormattingChars->setChecked( m_pKPresenterDoc->viewFormattingChars() ); updateGuideLineButton(); updateGridButton(); m_pKPresenterDoc->updateZoomRuler(); updatePageInfo(); actionAllowBgSpellCheck->setChecked( m_pKPresenterDoc->backgroundSpellCheckEnabled()); updateDirectCursorButton(); m_pKPresenterDoc->updatePresentationButton(); } void KPrView::updateDisplayObjectMasterPageButton() { actionDisplayObjectFromMasterPage->setChecked( !m_canvas->activePage()->displayObjectFromMasterPage()); } void KPrView::updateDisplayBackgroundButton() { actionDisplayBackgroundPage->setChecked( !m_canvas->activePage()->displayBackground() ); } void KPrView::updateHeaderFooterButton() { m_actionExtraHeader->setChecked( m_canvas->activePage()->hasHeader() ); m_actionExtraFooter->setChecked( m_canvas->activePage()->hasFooter() ); } void KPrView::guiActivateEvent( KParts::GUIActivateEvent *ev ) { if ( ev->activated() ) initGui(); KoView::guiActivateEvent( ev ); } void KPrView::setupActions() { actionEditCut = KStdAction::cut( TQT_TQOBJECT(this), TQT_SLOT( editCut() ), actionCollection(), "edit_cut" ); actionEditCopy = KStdAction::copy( TQT_TQOBJECT(this), TQT_SLOT( editCopy() ), actionCollection(), "edit_copy" ); actionEditPaste = KStdAction::paste( TQT_TQOBJECT(this), TQT_SLOT( editPaste() ), actionCollection(), "edit_paste" ); connect( m_pKPresenterDoc, TQT_SIGNAL( enablePaste( bool ) ), actionEditPaste, TQT_SLOT( setEnabled( bool ) ) ); m_pKPresenterDoc->clipboardDataChanged(); // set paste's initial state actionEditDelete = new KAction( i18n( "&Delete" ), "editdelete", CTRL + TQt::Key_Delete, TQT_TQOBJECT(this), TQT_SLOT( editDelete() ), actionCollection(), "edit_delete" ); actionEditSelectAll = KStdAction::selectAll( TQT_TQOBJECT(this), TQT_SLOT( editSelectAll() ), actionCollection(), "edit_selectall" ); actionEditDeSelectAll= KStdAction::deselect( TQT_TQOBJECT(this), TQT_SLOT( editDeSelectAll()), actionCollection(), "edit_deselectall"); actionEditCopyPage = new KAction( i18n( "Copy Slide" ), "editcopy", 0, TQT_TQOBJECT(this), TQT_SLOT( editCopyPage() ), actionCollection(), "edit_copypage" ); actionEditDuplicatePage = new KAction( i18n( "Duplicate Slide" ), "newslide", 0, TQT_TQOBJECT(this), TQT_SLOT( editDuplicatePage() ), actionCollection(), "edit_duplicatepage" ); actionEditDelPage = new KAction( i18n( "Delete Slide" ), "delslide", 0, TQT_TQOBJECT(this), TQT_SLOT( editDelPage() ), actionCollection(), "edit_delpage" ); actionEditFind=KStdAction::find( TQT_TQOBJECT(this), TQT_SLOT( editFind() ), actionCollection(), "edit_tqfind" ); actionEditFindNext = KStdAction::findNext( TQT_TQOBJECT(this), TQT_SLOT( editFindNext() ), actionCollection(), "edit_findnext" ); actionEditFindPrevious = KStdAction::findPrev( TQT_TQOBJECT(this), TQT_SLOT( editFindPrevious() ), actionCollection(), "edit_findprevious" ); actionEditReplace=KStdAction::replace( TQT_TQOBJECT(this), TQT_SLOT( editReplace() ), actionCollection(), "edit_tqreplace" ); // ---------------- View actions if ( !m_pKPresenterDoc->isEmbedded() ) { actionViewShowSideBar = new KToggleAction( i18n("Show Sidebar"), 0, TQT_TQOBJECT(this), TQT_SLOT( viewShowSideBar() ), actionCollection(), "view_showsidebar" ); actionViewShowSideBar->setCheckedState(i18n("Hide Sidebar")); actionViewShowNoteBar = new KToggleAction( i18n("Show Notebar"), 0, TQT_TQOBJECT(this), TQT_SLOT( viewShowNoteBar() ), actionCollection(), "view_shownotebar" ); actionViewShowNoteBar->setCheckedState(i18n("Hide Notebar")); } actionViewFormattingChars = new KToggleAction( i18n( "&Formatting Characters" ), 0, TQT_TQOBJECT(this), TQT_SLOT( slotViewFormattingChars() ), actionCollection(), "view_formattingchars" ); actionViewFormattingChars->setToolTip( i18n( "Toggle the display of non-printing characters." ) ); actionViewFormattingChars->setWhatsThis( i18n( "Toggle the display of non-printing characters.

When this is enabled, KPresenter shows you tabs, spaces, carriage returns and other non-printing characters." ) ); actionViewSlideMaster = new KToggleAction( i18n( "Slide &Master" ), 0, TQT_TQOBJECT(this), TQT_SLOT( viewSlideMaster() ), actionCollection(), "view_master" ); actionViewShowGuideLine= new KToggleAction( i18n( "Guide Lines" ), 0, TQT_TQOBJECT(this), TQT_SLOT( viewGuideLines() ), actionCollection(), "view_guidelines" ); actionViewShowGrid = new KToggleAction( i18n( "Show &Grid" ), 0, TQT_TQOBJECT(this), TQT_SLOT( viewGrid() ), actionCollection(), "view_grid" ); actionViewShowGrid->setCheckedState(i18n("Hide &Grid")); actionViewSnapToGrid= new KToggleAction( i18n( "Snap to Grid" ), 0, TQT_TQOBJECT(this), TQT_SLOT(viewSnapToGrid() ), actionCollection(), "view_snaptogrid" ); // ---------------- insert actions actionInsertPage = new KAction( i18n( "&Slide..." ), "slide", TQt::Key_F2, TQT_TQOBJECT(this), TQT_SLOT( insertPage() ), actionCollection(), "insert_page" ); new KAction( i18n( "Insert &Slide..." ), "newslide", 0, TQT_TQOBJECT(this), TQT_SLOT( insertPage() ), actionCollection(), "insert_page_popup" ); actionInsertPicture = new KAction( i18n( "P&icture..." ), "frame_image", TQt::SHIFT+TQt::Key_F5, TQT_TQOBJECT(this), TQT_SLOT( insertPicture() ), actionCollection(), "insert_picture" ); // ----------------- tools actions actionToolsMouse = new KToggleAction( i18n( "Select" ), "select", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsMouse() ), actionCollection(), "tools_mouse" ); actionToolsMouse->setExclusiveGroup( "tools" ); actionToolsMouse->setChecked( true ); actionToolsRotate = new KToggleAction( i18n( "&Rotate" ), "rotate", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsRotate() ), actionCollection(), "tools_rotate" ); actionToolsRotate->setExclusiveGroup( "tools" ); actionToolsZoom = new KToggleAction( i18n( "&Zoom" ), "viewmag", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsZoom() ), actionCollection(), "tools_zoom" ); actionToolsZoom->setExclusiveGroup( "tools" ); actionToolsShapePopup = new KActionMenu( i18n( "&Shape" ), "rectangle", actionCollection(), "tools_tqshapepopup" ); actionToolsShapePopup->setDelayed(true); connect(actionToolsShapePopup, TQT_SIGNAL(activated()), TQT_TQOBJECT(this), TQT_SLOT(toolsShapePopup())); actionToolsRectangle = new KToggleAction( i18n( "&Rectangle" ), "rectangle", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsRectangle() ), actionCollection(), "tools_rectangle" ); actionToolsRectangle->setExclusiveGroup( "tools" ); actionToolsCircleOrEllipse = new KToggleAction( i18n( "&Circle/Ellipse" ), "circle", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsCircleOrEllipse() ), actionCollection(), "tools_circle" ); actionToolsCircleOrEllipse->setExclusiveGroup( "tools" ); actionToolsPie = new KToggleAction( i18n( "&Pie/Arc/Chord" ), "pie", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsPie() ), actionCollection(), "tools_pie" ); actionToolsPie->setExclusiveGroup( "tools" ); actionToolsText = new KToggleAction( i18n( "&Text" ), "frame_text", TQt::Key_F10, // same shortcut as KWord TQT_TQOBJECT(this), TQT_SLOT( toolsText() ), actionCollection(), "tools_text" ); actionToolsText->setExclusiveGroup( "tools" ); actionToolsAutoform = new KToggleAction( i18n( "&Arrows && Connections" ), "autoform", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsAutoform() ), actionCollection(), "tools_autoform" ); actionToolsAutoform->setExclusiveGroup( "tools" ); actionToolsDiagramm = new KToggleAction( i18n( "&Chart" ), "frame_chart", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsDiagramm() ), actionCollection(), "tools_diagramm" ); actionToolsDiagramm->setExclusiveGroup( "tools" ); actionToolsTable = new KToggleAction( i18n( "Ta&ble"), "frame_spreadsheet", TQt::Key_F5 /*same as kword*/, TQT_TQOBJECT(this), TQT_SLOT( toolsTable() ), actionCollection(), "tools_table" ); actionToolsTable->setExclusiveGroup( "tools" ); actionToolsObject = new KoPartSelectAction( i18n( "&Object" ), "frame_query", TQT_TQOBJECT(this), TQT_SLOT( toolsObject() ), actionCollection(), "tools_object" ); actionToolsLinePopup = new KActionMenu( i18n( "&Line" ), "line", actionCollection(), "tools_linepopup" ); actionToolsLinePopup->setDelayed(true); connect(actionToolsLinePopup, TQT_SIGNAL(activated()), TQT_TQOBJECT(this), TQT_SLOT(toolsLinePopup())); actionToolsLine = new KToggleAction( i18n( "&Line" ), "line", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsLine() ), actionCollection(), "tools_line" ); actionToolsLine->setExclusiveGroup( "tools" ); actionToolsFreehand = new KToggleAction( i18n( "&Freehand" ), "freehand", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsFreehand() ), actionCollection(), "tools_freehand" ); actionToolsFreehand->setExclusiveGroup( "tools" ); actionToolsPolyline = new KToggleAction( i18n( "Po&lyline" ), "polyline", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsPolyline() ), actionCollection(), "tools_polyline" ); actionToolsPolyline->setExclusiveGroup( "tools" ); actionToolsQuadricBezierCurve = new KToggleAction( i18n( "&Quadric Bezier Curve" ), "quadricbeziercurve", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsQuadricBezierCurve() ), actionCollection(), "tools_quadricbeziercurve" ); actionToolsQuadricBezierCurve->setExclusiveGroup( "tools" ); actionToolsCubicBezierCurve = new KToggleAction( i18n( "C&ubic Bezier Curve" ), "cubicbeziercurve", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsCubicBezierCurve() ), actionCollection(), "tools_cubicbeziercurve" ); actionToolsCubicBezierCurve->setExclusiveGroup( "tools" ); actionToolsConvexOrConcavePolygon = new KToggleAction( i18n( "Co&nvex/Concave Polygon" ), "polygon", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsConvexOrConcavePolygon() ), actionCollection(), "tools_polygon" ); actionToolsConvexOrConcavePolygon->setExclusiveGroup( "tools" ); actionToolsClosedLinePopup = new KActionMenu( i18n( "&Closed Line" ), "closed_freehand", actionCollection(), "tools_closed_linepopup" ); actionToolsClosedLinePopup->setDelayed(true); connect(actionToolsClosedLinePopup, TQT_SIGNAL(activated()), TQT_TQOBJECT(this), TQT_SLOT(toolsClosedLinePopup())); actionToolsClosedFreehand = new KToggleAction( i18n( "Closed &Freehand" ), "closed_freehand", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsClosedFreehand() ), actionCollection(), "tools_closed_freehand" ); actionToolsClosedFreehand->setExclusiveGroup( "tools" ); actionToolsClosedPolyline = new KToggleAction( i18n( "Closed Po&lyline" ), "closed_polyline", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsClosedPolyline() ), actionCollection(), "tools_closed_polyline" ); actionToolsClosedPolyline->setExclusiveGroup( "tools" ); actionToolsClosedQuadricBezierCurve = new KToggleAction( i18n( "Closed &Quadric Bezier Curve" ), "closed_quadricbeziercurve", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsClosedQuadricBezierCurve() ), actionCollection(), "tools_closed_quadricbeziercurve" ); actionToolsClosedQuadricBezierCurve->setExclusiveGroup( "tools" ); actionToolsClosedCubicBezierCurve = new KToggleAction( i18n( "Closed C&ubic Bezier Curve" ), "closed_cubicbeziercurve", 0, TQT_TQOBJECT(this), TQT_SLOT( toolsClosedCubicBezierCurve() ), actionCollection(), "tools_closed_cubicbeziercurve" ); actionToolsClosedCubicBezierCurve->setExclusiveGroup( "tools" ); // ----------------- text actions actionTextFont = new KAction( i18n( "&Font..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( mtextFont() ), actionCollection(), "text_font" ); actionTextFontSize = new KFontSizeAction( i18n( "Font Size" ), 0, actionCollection(), "text_fontsize" ); connect( actionTextFontSize, TQT_SIGNAL( fontSizeChanged( int ) ), TQT_TQOBJECT(this), TQT_SLOT( sizeSelected( int ) ) ); #ifdef KFONTACTION_HAS_CRITERIA_ARG actionTextFontFamily = new KFontAction( KFontChooser::SmoothScalableFonts, i18n( "Font Family" ), 0, actionCollection(), "text_fontfamily" ); #else actionTextFontFamily = new KFontAction( i18n( "Font Family" ), 0, actionCollection(), "text_fontfamily" ); #endif connect( actionTextFontFamily , TQT_SIGNAL( activated( const TQString & ) ), TQT_TQOBJECT(this), TQT_SLOT( fontSelected( const TQString & ) ) ); actionTextBold = new KToggleAction( i18n( "&Bold" ), "text_bold", CTRL + TQt::Key_B, TQT_TQOBJECT(this), TQT_SLOT( textBold() ), actionCollection(), "text_bold" ); actionTextItalic = new KToggleAction( i18n( "&Italic" ), "text_italic", CTRL + TQt::Key_I, TQT_TQOBJECT(this), TQT_SLOT( textItalic() ), actionCollection(), "text_italic" ); actionTextUnderline = new KToggleAction( i18n( "&Underline" ), "text_under", CTRL + TQt::Key_U, TQT_TQOBJECT(this), TQT_SLOT( textUnderline() ), actionCollection(), "text_underline" ); actionFormatStrikeOut = new KToggleAction( i18n( "&Strike Out" ), "text_strike", 0 , TQT_TQOBJECT(this), TQT_SLOT( textStrikeOut() ), actionCollection(), "format_strike" ); actionTextColor = new TKSelectColorAction( i18n( "&Color..." ), TKSelectColorAction::TextColor, actionCollection(), "text_color" ,true); connect( actionTextColor, TQT_SIGNAL( activated() ), TQT_SLOT( textColor() ) ); actionTextColor->setDefaultColor(TQColor()); actionTextAlignLeft = new KToggleAction( i18n( "Align &Left" ), "text_left", ALT + TQt::Key_L, TQT_TQOBJECT(this), TQT_SLOT( textAlignLeft() ), actionCollection(), "text_alignleft" ); actionTextAlignLeft->setExclusiveGroup( "align" ); actionTextAlignLeft->setChecked( true ); actionTextAlignCenter = new KToggleAction( i18n( "Align &Center" ), "text_center", ALT + TQt::Key_C, TQT_TQOBJECT(this), TQT_SLOT( textAlignCenter() ), actionCollection(), "text_aligncenter" ); actionTextAlignCenter->setExclusiveGroup( "align" ); actionTextAlignRight = new KToggleAction( i18n( "Align &Right" ), "text_right", ALT + TQt::Key_R, TQT_TQOBJECT(this), TQT_SLOT( textAlignRight() ), actionCollection(), "text_alignright" ); actionTextAlignRight->setExclusiveGroup( "align" ); actionTextAlignBlock = new KToggleAction( i18n( "Align &Block" ), "text_block", CTRL + TQt::Key_J, TQT_TQOBJECT(this), TQT_SLOT( textAlignBlock() ), actionCollection(), "text_alignblock" ); actionTextAlignBlock->setExclusiveGroup( "align" ); actionFormatNumber = new KActionMenu( i18n( "Number" ), "enumList", actionCollection(), "format_number" ); actionFormatNumber->setDelayed( false ); actionFormatBullet = new KActionMenu( i18n( "Bullet" ), "unsortedList", actionCollection(), "format_bullet" ); actionFormatBullet->setDelayed( false ); TQPtrList stylesList; KoCounterStyleWidget::makeCounterRepresenterList( stylesList ); TQPtrListIterator styleIt( stylesList ); for ( ; styleIt.current() ; ++styleIt ) { // Dynamically create toggle-actions for each list style. // This approach allows to edit toolbars and extract separate actions from this menu KToggleAction* act = new KToggleAction( styleIt.current()->name(), /*TODO icon,*/ 0, TQT_TQOBJECT(this), TQT_SLOT( slotCounterStyleSelected() ), actionCollection(), TQString("counterstyle_%1").tqarg( styleIt.current()->style() ).latin1() ); act->setExclusiveGroup( "counterstyle" ); // Add to the right menu: both for "none", bullet for bullets, numbers otherwise if ( styleIt.current()->style() == KoParagCounter::STYLE_NONE ) { actionFormatBullet->insert( act ); actionFormatNumber->insert( act ); } else if ( styleIt.current()->isBullet() ) actionFormatBullet->insert( act ); else actionFormatNumber->insert( act ); } actionTextDepthPlus = new KAction( i18n( "&Increase Depth" ), TQApplication::reverseLayout() ?"format_decreaseindent" : "format_increaseindent", CTRL + TQt::Key_Plus, TQT_TQOBJECT(this), TQT_SLOT( textDepthPlus() ), actionCollection(), "text_depthPlus" ); actionTextDepthMinus = new KAction( i18n( "&Decrease Depth" ), TQApplication::reverseLayout() ?"format_increaseindent" : "format_decreaseindent", CTRL + TQt::Key_Minus, TQT_TQOBJECT(this), TQT_SLOT( textDepthMinus() ), actionCollection(), "text_depthMinus" ); actionTextExtentCont2Height = new KAction( i18n( "Extend Contents to Object &Height" ), 0, TQT_TQOBJECT(this), TQT_SLOT( textContentsToHeight() ), actionCollection(), "text_con2hei" ); actionTextExtendObj2Cont = new KAction( i18n( "&Extend Object to Fit Contents" ), 0, TQT_TQOBJECT(this), TQT_SLOT( textObjectToContents() ), actionCollection(), "text_obj2cont" ); actionTextInsertPageNum = new KAction( i18n( "&Insert Slide Number" ), "pgnum", 0, TQT_TQOBJECT(this), TQT_SLOT( textInsertPageNum() ), actionCollection(), "text_inspgnum" ); // ----------------- format actions actionExtraProperties = new KAction( i18n( "&Properties" ), "penbrush", 0, TQT_TQOBJECT(this), TQT_SLOT( extraProperties() ), actionCollection(), "extra_properties" ); actionExtraArrangePopup = new KActionMenu( i18n( "Arra&nge Objects" ), "arrange", actionCollection(), "extra_arrangepopup" ); actionExtraArrangePopup->setDelayed( false ); actionExtraRaise = new KAction( i18n( "Ra&ise Objects" ), "raise", CTRL+TQt::SHIFT+TQt::Key_R, TQT_TQOBJECT(this), TQT_SLOT( extraRaise() ), actionCollection(), "extra_raise" ); actionExtraLower = new KAction( i18n( "&Lower Objects" ), "lower", CTRL +TQt::SHIFT+ TQt::Key_L, TQT_TQOBJECT(this), TQT_SLOT( extraLower() ), actionCollection(), "extra_lower" ); actionExtraBringForward= new KAction( i18n( "Bring to Front" ), "bring_forward", 0, TQT_TQOBJECT(this), TQT_SLOT( extraBringForward() ), actionCollection(), "extra_bring_forward" ); actionExtraSendBackward= new KAction( i18n( "Send to Back" ), "send_backward", 0, TQT_TQOBJECT(this), TQT_SLOT( extraSendBackward() ), actionCollection(), "extra_send_backward" ); actionExtraRotate = new KAction( i18n( "R&otate Objects..." ), "rotate_cw", 0, TQT_TQOBJECT(this), TQT_SLOT( extraRotate() ), actionCollection(), "extra_rotate" ); actionExtraShadow = new KAction( i18n( "&Shadow Objects..." ), "shadow", 0, TQT_TQOBJECT(this), TQT_SLOT( extraShadow() ), actionCollection(), "extra_shadow" ); actionExtraAlignObjLeft = new KAction( i18n( "Align &Left" ), "aoleft", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjLeft() ), actionCollection(), "extra_alignleft" ); actionExtraAlignObjCenterH = new KAction( i18n( "Align Center (&horizontally)" ), "aocenterh", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjCenterH() ), actionCollection(), "extra_aligncenterh" ); actionExtraAlignObjRight = new KAction( i18n( "Align &Right" ), "aoright", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjRight() ), actionCollection(), "extra_alignright" ); actionExtraAlignObjTop = new KAction( i18n( "Align &Top" ), "aotop", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjTop() ), actionCollection(), "extra_aligntop" ); actionExtraAlignObjCenterV = new KAction( i18n( "Align Center (&vertically)" ), "aocenterv", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjCenterV() ), actionCollection(), "extra_aligncenterv" ); actionExtraAlignObjBottom = new KAction( i18n( "Align &Bottom" ), "aobottom", 0, TQT_TQOBJECT(this), TQT_SLOT( extraAlignObjBottom() ), actionCollection(), "extra_alignbottom" ); actionExtraBackground = new KAction( i18n( "Slide Bac&kground..." ), "background", 0, TQT_TQOBJECT(this), TQT_SLOT( extraBackground() ), actionCollection(), "extra_background" ); actionExtraLayout = new KAction( i18n( "Page &Layout..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( extraLayout() ), actionCollection(), "extra_layout" ); m_actionExtraHeader = new KToggleAction( i18n( "Enable Document &Header" ), 0, TQT_TQOBJECT(this), TQT_SLOT( viewHeader() ), actionCollection(), "extra_header" ); m_actionExtraHeader->setCheckedState( i18n( "Disable Document &Header" ) ); m_actionExtraHeader->setToolTip( i18n( "Shows and hides header display for the current slide." ) ); m_actionExtraFooter = new KToggleAction( i18n( "Enable Document Foo&ter" ), 0, TQT_TQOBJECT(this), TQT_SLOT( viewFooter() ), actionCollection(), "extra_footer" ); m_actionExtraFooter->setCheckedState( i18n( "Disable Document Foo&ter" ) ); m_actionExtraFooter->setToolTip( i18n( "Shows and hides footer display for the current slide." ) ); actionExtraConfigure = new KAction( i18n( "Configure KPresenter..." ), "configure", 0, TQT_TQOBJECT(this), TQT_SLOT( extraConfigure() ), actionCollection(), "extra_configure" ); actionExtraWebPres = new KAction( i18n( "Create &HTML Slideshow..." ), "webpres", 0, TQT_TQOBJECT(this), TQT_SLOT( extraWebPres() ), actionCollection(), "extra_webpres" ); actionExtraMSPres = new KAction( i18n( "Create Memor&y Stick Slideshow..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( extraMSPres() ), actionCollection(), "extra_mspres" ); actionExtraCreateTemplate = new KAction( i18n( "Template Manager" ), 0, TQT_TQOBJECT(this), TQT_SLOT( extraCreateTemplate() ), actionCollection(), "extra_template" ); actionExtraDefaultTemplate = new KAction( i18n( "Use Current Slide as Default Template" ), 0, TQT_TQOBJECT(this), TQT_SLOT( extraDefaultTemplate() ), actionCollection(), "extra_defaulttemplate" ); actionExtraAlignObjsPopup = new KActionMenu( i18n("Align O&bjects"), "alignobjs", actionCollection(), "extra_alignobjs" ); actionExtraAlignObjsPopup->setDelayed( false ); actionExtraLineBegin = new KAction( i18n("Line Begin"), "line_begin", 0, TQT_TQOBJECT(this), TQT_SLOT( extraLineBegin() ), actionCollection(), "extra_linebegin" ); actionExtraLineEnd = new KAction( i18n("Line End"), "line_end", 0, TQT_TQOBJECT(this), TQT_SLOT( extraLineEnd() ), actionCollection(), "extra_lineend" ); actionExtraPenStyle = new KoLineStyleAction( i18n("Outline Style"), "pen_style", TQT_TQOBJECT(this), TQT_SLOT( extraPenStyle(int) ), actionCollection(), "extra_penstyle" ); actionExtraPenStyle->setShowCurrentSelection(false); actionExtraPenWidth = new KoLineWidthAction( i18n("Outline Width"), "pen_width", TQT_TQOBJECT(this), TQT_SLOT( extraPenWidth(double) ), actionCollection(), "extra_penwidth" ); actionExtraPenWidth->setUnit( kPresenterDoc()->unit() ); actionExtraPenWidth->setShowCurrentSelection(false); connect( kPresenterDoc(), TQT_SIGNAL( unitChanged( KoUnit::Unit ) ), actionExtraPenWidth, TQT_SLOT( setUnit( KoUnit::Unit ) ) ); actionExtraGroup = new KAction( i18n( "&Group Objects" ), "group", TQKeySequence( "Ctrl+G" ), TQT_TQOBJECT(this), TQT_SLOT( extraGroup() ), actionCollection(), "extra_group" ); actionExtraUnGroup = new KAction( i18n( "&Ungroup Objects" ), "ungroup", TQKeySequence( "Ctrl+Shift+G" ), TQT_TQOBJECT(this), TQT_SLOT( extraUnGroup() ), actionCollection(), "extra_ungroup" ); // ----------------- slideshow actions actionScreenConfigPages = new KAction( i18n( "&Configure Slide Show..." ), "configure", 0, TQT_TQOBJECT(this), TQT_SLOT( screenConfigPages() ), actionCollection(), "screen_configpages" ); actionScreenAssignEffect = new KAction( i18n( "Edit &Object Effect..." ), "effect", 0, TQT_TQOBJECT(this), TQT_SLOT( screenAssignEffect() ), actionCollection(), "screen_assigneffect"); actionScreenTransEffect = new KAction( i18n( "Edit Slide &Transition..." ), "slide_effect", 0, TQT_TQOBJECT(this), TQT_SLOT( screenTransEffect() ), actionCollection(), "screen_transeffect"); actionScreenStart = new KAction( i18n( "&Start" ), "2rightarrow", TQt::Key_F12, TQT_TQOBJECT(this), TQT_SLOT( screenStart() ), actionCollection(), "screen_start" ); actionScreenStartFromFirst = new KAction( i18n( "Start From &First Slide" ), "1rightarrow", 0, TQT_TQOBJECT(this), TQT_SLOT( screenStartFromFirst() ), actionCollection(), "screen_startfromfirst" ); actionScreenFirst = new KAction( i18n( "&Go to Start" ), "start", 0, TQT_TQOBJECT(this), TQT_SLOT( screenFirst() ), actionCollection(), "screen_first" ); actionScreenPrev = new KAction( i18n( "&Previous Slide" ), "back", TQt::Key_Prior, TQT_TQOBJECT(this), TQT_SLOT( screenPrev() ), actionCollection(), "screen_prev" ); actionScreenNext = new KAction( i18n( "&Next Slide" ), "forward", TQt::Key_Next, TQT_TQOBJECT(this), TQT_SLOT( screenNext() ), actionCollection(), "screen_next" ); actionScreenLast = new KAction( i18n( "Go to &End" ), "finish", 0, TQT_TQOBJECT(this), TQT_SLOT( screenLast() ), actionCollection(), "screen_last" ); actionScreenSkip = new KAction( i18n( "Goto &Slide..." ), "goto", 0, TQT_TQOBJECT(this), TQT_SLOT( screenSkip() ), actionCollection(), "screen_skip" ); // ----------------- colorbar(Brush and Pen) action actionBrushColor = new TKSelectColorAction( i18n( "Fill Color..." ), TKSelectColorAction::FillColor, actionCollection(), "brush_color" ,true); connect( actionBrushColor, TQT_SIGNAL( activated() ), TQT_SLOT( brushChosen() ) ); actionBrushColor->setDefaultColor(TQColor()); actionPenColor = new TKSelectColorAction( i18n( "Outline Color..." ), TKSelectColorAction::LineColor, actionCollection(), "pen_color" ); connect( actionPenColor, TQT_SIGNAL( activated() ), TQT_SLOT( penChosen() ) ); actionPenColor->setDefaultColor(TQColor()); actionExtendObjectHeight = new KAction( i18n( "&Extend Contents to Object Height" ),0, TQT_TQOBJECT(this), TQT_SLOT( textContentsToHeight() ), actionCollection(), "extendobjectheight" ); actionResizeTextObject = new KAction( i18n( "&Resize Object to Fit Contents" ),0, TQT_TQOBJECT(this), TQT_SLOT( textObjectToContents() ), actionCollection(), "resizetextobject" ); actionRenamePage=new KAction(i18n( "&Rename Slide..." ),0,TQT_TQOBJECT(this), TQT_SLOT( renamePageTitle() ), actionCollection(), "rename_page" ); actionPicOriginalSize = new KAction( i18n( "Sca&le to Original Size" ), 0, TQT_TQOBJECT(this), TQT_SLOT( picViewOriginalSize() ), actionCollection(), "pic_original_size" ); actionPic640x480=new KAction(i18n( "640x480" ),0,TQT_TQOBJECT(this), TQT_SLOT( picViewOrig640x480() ), actionCollection(), "pic_640_480" ); actionPic800x600=new KAction(i18n( "800x600" ),0,TQT_TQOBJECT(this), TQT_SLOT( picViewOrig800x600() ), actionCollection(), "pic_800_600" ); actionPic1024x768=new KAction(i18n( "1024x768" ),0,TQT_TQOBJECT(this), TQT_SLOT( picViewOrig1024x768() ), actionCollection(), "pic_1024_768" ); actionPic1280x1024=new KAction(i18n( "1280x1024" ),0,TQT_TQOBJECT(this), TQT_SLOT( picViewOrig1280x1024() ), actionCollection(), "pic_1280_1024" ); actionPic1600x1200=new KAction(i18n( "1600x1200" ),0,TQT_TQOBJECT(this), TQT_SLOT( picViewOrig1600x1200() ), actionCollection(), "pic_1600_1200" ); actionChangePic=new KAction( i18n( "&Change Picture..." ),"frame_image",0,TQT_TQOBJECT(this), TQT_SLOT( chPic() ), actionCollection(), "change_picture" ); actionImageEffect = new KAction( i18n("Image &Effect..."), 0, TQT_TQOBJECT(this), TQT_SLOT(imageEffect()), actionCollection(), "image_effect"); actionFormatSuper = new KToggleAction( i18n( "Superscript" ), "super", 0, TQT_TQOBJECT(this), TQT_SLOT( textSuperScript() ), actionCollection(), "format_super" ); actionFormatSuper->setExclusiveGroup( "valign" ); actionFormatSub = new KToggleAction( i18n( "Subscript" ), "sub", 0, TQT_TQOBJECT(this), TQT_SLOT( textSubScript() ), actionCollection(), "format_sub" ); actionFormatSub->setExclusiveGroup( "valign" ); actionInsertSpecialChar = new KAction( i18n( "Sp&ecial Character..." ), "char", ALT + TQt::SHIFT + TQt::Key_C, TQT_TQOBJECT(this), TQT_SLOT( insertSpecialChar() ), actionCollection(), "insert_specialchar" ); actionInsertLink = new KAction( i18n( "Link..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( insertLink() ), actionCollection(), "insert_link" ); #if 0 //code from page.cc //not implemented picResizeMenu->insertSeparator(); picResizeMenu->insertItem( i18n( "Enter Custom Factor..." ), TQT_TQOBJECT(this), TQT_SLOT( picViewOrigFactor() ) ); #endif (void) new KAction( i18n( "Configure &Autocorrection..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( extraAutoFormat() ), actionCollection(), "extra_autocorrection" ); actionExtraSpellCheck = KStdAction::spelling( TQT_TQOBJECT(this), TQT_SLOT( slotSpellCheck() ), actionCollection(), "extra_spellcheck" ); actionFormatParag = new KAction( i18n( "&Paragraph..." ), ALT + CTRL + TQt::Key_P, TQT_TQOBJECT(this), TQT_SLOT( formatParagraph() ), actionCollection(), "format_paragraph" ); actionFormatDefault=new KAction( i18n( "Default Format" ), 0, TQT_TQOBJECT(this), TQT_SLOT( textDefaultFormat() ), actionCollection(), "text_default" ); actionOpenLink = new KAction( i18n( "Open Link" ), 0, TQT_TQOBJECT(this), TQT_SLOT( openLink() ), actionCollection(), "open_link" ); actionChangeLink=new KAction( i18n("Change Link..."), 0, TQT_TQOBJECT(this), TQT_SLOT(changeLink()), actionCollection(), "change_link"); actionCopyLink = new KAction( i18n( "Copy Link" ), 0, TQT_TQOBJECT(this), TQT_SLOT( copyLink() ), actionCollection(), "copy_link" ); actionRemoveLink = new KAction( i18n( "Remove Link" ), 0, TQT_TQOBJECT(this), TQT_SLOT( removeLink() ), actionCollection(), "remove_link" ); actionAddLinkToBookmak = new KAction( i18n( "Add to Bookmark" ), 0, TQT_TQOBJECT(this), TQT_SLOT( addToBookmark() ), actionCollection(), "add_to_bookmark" ); actionEditCustomVarsEdit = new KAction( i18n( "&Custom Variables..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( editCustomVars() ), actionCollection(), "edit_vars" ); actionEditCustomVars = new KAction( i18n( "Edit Variable..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( editCustomVariable() ), actionCollection(), "edit_customvars" ); m_variableDefMap.clear(); actionInsertVariable = new KActionMenu( i18n( "&Variable" ), actionCollection(), "insert_variable" ); // The last argument is only needed if a submenu is to be created addVariableActions( VT_FIELD, KoFieldVariable::actionTexts(), actionInsertVariable, i18n("&Property") ); addVariableActions( VT_DATE, KoDateVariable::actionTexts(), actionInsertVariable, i18n("&Date") ); addVariableActions( VT_TIME, KoTimeVariable::actionTexts(), actionInsertVariable, i18n("&Time") ); actionInsertCustom = new KActionMenu( i18n( "&Custom" ), actionCollection(), "insert_custom" ); actionInsertVariable->insert(actionInsertCustom); refreshCustomMenu(); addVariableActions( VT_PGNUM, KoPageVariable::actionTexts(), actionInsertVariable, i18n("&Page") ); addVariableActions( VT_STATISTIC, KPrStatisticVariable::actionTexts(), actionInsertVariable, i18n("&Statistic") ); actionInsertVariable->popupMenu()->insertSeparator(); actionRefreshAllVariable = new KAction( i18n( "&Refresh All Variables" ), 0, TQT_TQOBJECT(this), TQT_SLOT( refreshAllVariable() ), actionCollection(), "refresh_all_variable" ); actionInsertVariable->insert(actionRefreshAllVariable); actionIncreaseFontSize = new KAction( i18n("Increase Font Size"),"fontsizeup", 0, TQT_TQOBJECT(this), TQT_SLOT( increaseFontSize() ), actionCollection(), "increaseFontSize" ); actionDecreaseFontSize = new KAction( i18n("Decrease Font Size"),"fontsizedown", 0, TQT_TQOBJECT(this), TQT_SLOT( decreaseFontSize() ), actionCollection(), "decreaseFontSize" ); actionChangeCase=new KAction( i18n( "Change Case..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( changeCaseOfText() ), actionCollection(), "change_case" ); actionViewZoom = new KSelectAction( i18n( "Zoom" ), "viewmag", 0, actionCollection(), "view_zoom" ); connect( actionViewZoom, TQT_SIGNAL( activated( const TQString & ) ), TQT_TQOBJECT(this), TQT_SLOT( viewZoom( const TQString & ) ) ); actionViewZoom->setEditable(true); changeZoomMenu( ); actionFormatStylist = new KAction( i18n( "&Style Manager" ), ALT + CTRL + TQt::Key_S, TQT_TQOBJECT(this), TQT_SLOT( extraStylist() ), actionCollection(), "format_stylist" ); actionFormatStyleMenu = new KActionMenu( i18n( "St&yle" ), 0, actionCollection(), "format_stylemenu" ); actionFormatStyle = new KSelectAction( i18n( "St&yle" ), 0, actionCollection(), "format_style" ); connect( actionFormatStyle, TQT_SIGNAL( activated( int ) ), TQT_TQOBJECT(this), TQT_SLOT( textStyleSelected( int ) ) ); actionFormatStyle->setMenuAccelsEnabled( true ); updateStyleList(); actionAllowAutoFormat = new KToggleAction( i18n( "Enable Autocorrection" ), 0, TQT_TQOBJECT(this), TQT_SLOT( slotAllowAutoFormat() ), actionCollection(), "enable_autocorrection" ); actionAllowAutoFormat->setCheckedState(i18n("Disable Autocorrection")); // ------------------- Actions with a key binding and no GUI item new KAction( i18n( "Insert Non-Breaking Space" ), CTRL+TQt::Key_Space, TQT_TQOBJECT(this), TQT_SLOT( slotNonbreakingSpace() ), actionCollection(), "nonbreaking_space" ); new KAction( i18n( "Insert Non-Breaking Hyphen" ), CTRL+TQt::SHIFT+TQt::Key_Minus, TQT_TQOBJECT(this), TQT_SLOT( slotNonbreakingHyphen() ), actionCollection(), "nonbreaking_hyphen" ); new KAction( i18n( "Insert Soft Hyphen" ), CTRL+TQt::Key_Minus, TQT_TQOBJECT(this), TQT_SLOT( slotSoftHyphen() ), actionCollection(), "soft_hyphen" ); new KAction( i18n( "Line Break" ), TQt::SHIFT+TQt::Key_Return, TQT_TQOBJECT(this), TQT_SLOT( slotLineBreak() ), actionCollection(), "line_break" ); new KAction( i18n( "Completion" ), KStdAccel::shortcut(KStdAccel::TextCompletion), TQT_TQOBJECT(this), TQT_SLOT( slotCompletion() ), actionCollection(), "completion" ); new KAction( i18n( "Increase Numbering Level" ), ALT+TQt::Key_Right, TQT_TQOBJECT(this), TQT_SLOT( slotIncreaseNumberingLevel() ), actionCollection(), "increase_numbering_level" ); new KAction( i18n( "Decrease Numbering Level" ), ALT+TQt::Key_Left, TQT_TQOBJECT(this), TQT_SLOT( slotDecreaseNumberingLevel() ), actionCollection(), "decrease_numbering_level" ); actionInsertComment = new KAction( i18n( "Comment..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( insertComment() ), actionCollection(), "insert_comment" ); actionEditComment = new KAction( i18n("Edit Comment..."), 0, TQT_TQOBJECT(this), TQT_SLOT(editComment()), actionCollection(), "edit_comment"); actionAddGuideLine = new KAction( i18n( "Add Guide Line..."), 0, TQT_TQOBJECT(this), TQT_SLOT( addGuideLine()), actionCollection(), "add_guideline"); actionRemoveComment = new KAction( i18n("Remove Comment"), 0, TQT_TQOBJECT(this), TQT_SLOT(removeComment()), actionCollection(), "remove_comment"); actionCopyTextOfComment = new KAction( i18n("Copy Text of Comment..."), 0, TQT_TQOBJECT(this), TQT_SLOT(copyTextOfComment()), actionCollection(), "copy_text_comment"); actionConfigureCompletion = new KAction( i18n( "&Configure Completion..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( configureCompletion() ), actionCollection(), "configure_completion" ); actionZoomMinus = new KAction( i18n( "Zoom Out" ), "viewmag-",0, TQT_TQOBJECT(this), TQT_SLOT( zoomMinus() ), actionCollection(), "zoom_minus" ); actionZoomPlus = new KAction( i18n( "Zoom In" ), "viewmag+",0, TQT_TQOBJECT(this), TQT_SLOT( zoomPlus() ), actionCollection(), "zoom_plus" ); actionZoomEntirePage = new KAction( i18n( "Zoom Entire Slide" ), 0, TQT_TQOBJECT(this), TQT_SLOT( zoomEntirePage() ), actionCollection(), "zoom_entire_page" ); actionZoomMinus = new KAction( i18n( "Zoom Slide Width" ), 0, TQT_TQOBJECT(this), TQT_SLOT( zoomPageWidth() ), actionCollection(), "zoom_page_width" ); actionZoomSelectedObject= new KAction( i18n( "Zoom Selected Objects" ), "viewmagfit",0, TQT_TQOBJECT(this), TQT_SLOT( zoomSelectedObject() ), actionCollection(), "zoom_selected_object" ); actionZoomPageHeight= new KAction( i18n( "Zoom Slide Height" ), 0, TQT_TQOBJECT(this), TQT_SLOT( zoomPageHeight() ), actionCollection(), "zoom_page_height" ); actionZoomAllObject= new KAction( i18n( "Zoom All Objects" ), 0, TQT_TQOBJECT(this), TQT_SLOT( zoomAllObject() ), actionCollection(), "zoom_all_object" ); actionFlipHorizontal= new KAction( i18n( "Horizontal Flip" ), 0, TQT_TQOBJECT(this), TQT_SLOT( flipHorizontal() ), actionCollection(), "horizontal_flip" ); actionFlipVertical= new KAction( i18n( "Vertical Flip" ), 0, TQT_TQOBJECT(this), TQT_SLOT( flipVertical() ), actionCollection(), "vertical_flip" ); actionDuplicateObj = new KAction( i18n( "Duplicate Object..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( duplicateObj() ), actionCollection(), "duplicate_obj" ); actionApplyAutoFormat= new KAction( i18n( "Apply Autocorrection" ), 0, TQT_TQOBJECT(this), TQT_SLOT( applyAutoFormat() ), actionCollection(), "apply_autoformat" ); actionCreateStyleFromSelection = new KAction( i18n( "Create Style From Selection..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( createStyleFromSelection()), actionCollection(), "create_style" ); actionCloseObject = new KAction( i18n( "Close Object" ), 0, TQT_TQOBJECT(this), TQT_SLOT( closeObject()), actionCollection(), "close_object" ); actionAlignVerticalTop = new KToggleAction( i18n( "Align Top" ), 0, TQT_TQOBJECT(this), TQT_SLOT( alignVerticalTop() ), actionCollection(), "align_top" ); actionAlignVerticalTop->setExclusiveGroup( "vertical_tqalignment" ); actionAlignVerticalTop->setChecked( true ); actionAlignVerticalBottom = new KToggleAction( i18n( "Align Bottom" ), 0, TQT_TQOBJECT(this), TQT_SLOT( alignVerticalBottom() ), actionCollection(), "align_bottom" ); actionAlignVerticalBottom->setExclusiveGroup( "vertical_tqalignment" ); actionAlignVerticalCenter = new KToggleAction( i18n( "Align Middle" ), 0, TQT_TQOBJECT(this), TQT_SLOT( alignVerticalCenter() ), actionCollection(), "align_center" ); actionAlignVerticalCenter->setExclusiveGroup( "vertical_tqalignment" ); actionSavePicture= new KAction( i18n("Save Picture..."), 0, TQT_TQOBJECT(this), TQT_SLOT( savePicture() ), actionCollection(), "save_picture"); actionAllowBgSpellCheck = new KToggleAction( i18n( "Autospellcheck" ), 0, TQT_TQOBJECT(this), TQT_SLOT( autoSpellCheck() ), actionCollection(), "tool_auto_spellcheck" ); actionInsertFile= new KAction( i18n( "File..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( insertFile() ), actionCollection(), "insert_file" ); actionImportStyle= new KAction( i18n( "Import Styles..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( importStyle() ), actionCollection(), "import_style" ); actionSaveBackgroundPicture= new KAction( i18n( "Save Background Picture..." ), 0, TQT_TQOBJECT(this), TQT_SLOT(backgroundPicture() ), actionCollection(), "save_bgpicture" ); #if 0 actionInsertDirectCursor = new KToggleAction( i18n( "Type Anywhere Cursor" ), 0, TQT_TQOBJECT(this), TQT_SLOT( insertDirectCursor() ), actionCollection(), "direct_cursor" ); #endif actionSpellIgnoreAll = new KAction( i18n( "Ignore All" ), 0, TQT_TQOBJECT(this), TQT_SLOT( slotAddIgnoreAllWord() ), actionCollection(), "ignore_all" ); actionAddWordToPersonalDictionary=new KAction( i18n( "Add Word to Dictionary" ),0, TQT_TQOBJECT(this), TQT_SLOT( addWordToDictionary() ), actionCollection(), "add_word_to_dictionary" ); actionCustomSlideShow = new KAction( i18n( "Custom Slide Show..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( customSlideShow() ), actionCollection(), "custom_slide_show" ); actionDisplayObjectFromMasterPage = new KToggleAction( i18n( "Hide Object From Slide Master" ), 0, TQT_TQOBJECT(this), TQT_SLOT( displayObjectFromMasterPage() ), actionCollection(), "display_object_from_master_page" ); actionDisplayObjectFromMasterPage->setCheckedState(i18n("Display Object From Slide Master")); actionDisplayBackgroundPage = new KToggleAction( i18n( "Hide Background" ), 0, TQT_TQOBJECT(this), TQT_SLOT( displayBackground() ), actionCollection(), "display_background" ); actionDisplayBackgroundPage->setCheckedState(i18n("Display Background")); } void KPrView::displayObjectFromMasterPage() { bool state=actionDisplayObjectFromMasterPage->isChecked(); m_canvas->activePage()->setDisplayObjectFromMasterPage( !state ); KPrDisplayObjectFromMasterPage * cmd =new KPrDisplayObjectFromMasterPage( state ? i18n("Hide Object From Slide Master") : i18n("Display Object From Slide Master"), m_pKPresenterDoc, m_canvas->activePage(), !state); m_pKPresenterDoc->addCommand(cmd); m_pKPresenterDoc->updateSideBarItem( m_pKPresenterDoc->masterPage() ); } void KPrView::displayBackground() { bool state=actionDisplayBackgroundPage->isChecked(); m_canvas->activePage()->setDisplayBackground( !state ); KPrDisplayBackgroundPage * cmd =new KPrDisplayBackgroundPage( state ? i18n("Hide Background") : i18n("Display Background"), m_pKPresenterDoc, m_canvas->activePage(), !state); m_pKPresenterDoc->addCommand(cmd); m_pKPresenterDoc->updateSideBarItem( m_pKPresenterDoc->masterPage() ); } void KPrView::customSlideShow() { KPrCustomSlideShowDia *dlg = new KPrCustomSlideShowDia( this, m_pKPresenterDoc, "custom slide show" ); dlg->exec(); delete dlg; //clear element m_pKPresenterDoc->clearTestCustomSlideShow(); } void KPrView::textSubScript() { m_canvas->setTextSubScript(actionFormatSub->isChecked()); } void KPrView::textSuperScript() { m_canvas->setTextSuperScript(actionFormatSuper->isChecked()); } void KPrView::decreaseFontSize() { m_canvas->setDecreaseFontSize(); } void KPrView::increaseFontSize() { m_canvas->setIncreaseFontSize(); } void KPrView::objectSelectedChanged() { bool state=m_canvas->isOneObjectSelected(); bool headerfooterselected=false; if (m_canvas->numberOfObjectSelected()==1) { KPrObject *obj=m_canvas->getSelectedObj(); //disable this action when we select a header/footer if (obj==m_pKPresenterDoc->header() || obj==m_pKPresenterDoc->footer()) headerfooterselected=true; else headerfooterselected=false; } actionScreenAssignEffect->setEnabled(state && !headerfooterselected); actionEditDelete->setEnabled(state && !headerfooterselected); actionEditCut->setEnabled(state && !headerfooterselected); KPrObjectProperties objectProperties( m_canvas->activePage()->getSelectedObjects() ); int flags = objectProperties.getPropertyFlags(); // only button when object support them or none object is selected actionBrushColor->setEnabled( !state || ( flags & KPrObjectProperties::PtBrush ) ); actionExtraLineBegin->setEnabled( !state || ( flags & KPrObjectProperties::PtLineEnds ) ); actionExtraLineEnd->setEnabled( !state || ( flags & KPrObjectProperties::PtLineEnds ) ); actionExtraPenWidth->setEnabled( !state || ( flags & KPrObjectProperties::PtPenWidth ) ); actionExtraProperties->setEnabled(state && !headerfooterselected); actionExtraRotate->setEnabled(state && !headerfooterselected); actionExtraShadow->setEnabled(state && !m_canvas->haveASelectedPartObj() && !headerfooterselected); actionExtraAlignObjsPopup->setEnabled(state && !headerfooterselected); actionExtraGroup->setEnabled(state && m_canvas->numberOfObjectSelected()>1); actionExtraUnGroup->setEnabled(state && m_canvas->haveASelectedGroupObj()); bool enableAlign = m_canvas->canMoveOneObject() && state && !headerfooterselected; actionExtraAlignObjLeft->setEnabled(enableAlign); actionExtraAlignObjCenterH->setEnabled(enableAlign); actionExtraAlignObjRight->setEnabled(enableAlign); actionExtraAlignObjTop->setEnabled(enableAlign); actionExtraAlignObjCenterV->setEnabled(enableAlign); actionExtraAlignObjBottom->setEnabled(enableAlign); //actionEditDelete->setEnabled(state); int nbobj=m_canvas->numberOfObjectSelected(); actionDuplicateObj->setEnabled(state && (nbobj>=1)); state = state && (nbobj==1); actionExtraArrangePopup->setEnabled(state); actionExtraRaise->setEnabled( nbobj > 0 ); actionExtraLower->setEnabled( nbobj > 0 ); actionExtraBringForward->setEnabled( nbobj > 0 ); actionExtraSendBackward->setEnabled( nbobj > 0 ); //actionExtraConfigPicture->setEnabled( state && m_canvas->haveASelectedPixmapObj() ); //actionPenColor->setEnabled(state); //actionExtraPenStyle->setEnabled(state); //actionExtraPenWidth->setEnabled(state); actionApplyAutoFormat->setEnabled(m_canvas->oneObjectTextExist()); slotObjectEditChanged(); } void KPrView::backOk( KPrBackDialog* backDia, bool takeGlobal ) { KPrPage *page=m_canvas->activePage(); KPrSetBackCmd *setBackCmd = new KPrSetBackCmd( i18n( "Set Background" ), backDia->getBackGround(), page->background()->getBackGround(), backDia->useMasterBackground(), takeGlobal, m_pKPresenterDoc,page); setBackCmd->execute(); m_pKPresenterDoc->addCommand( setBackCmd ); } void KPrView::afChooseOk( const TQString & c ) { TQFileInfo fileInfo( c ); TQString fileName = locate( "autoforms", fileInfo.dirPath( false ) + "/" + fileInfo.baseName() + ".atf", KPrFactory::global() ); deSelectAllObjects(); m_canvas->setToolEditMode( INS_AUTOFORM ); m_canvas->setAutoForm( fileName ); } void KPrView::slotAfchooseCanceled() { setTool( TEM_MOUSE ); } void KPrView::propertiesOk() { KCommand *cmd = m_propertyEditor->getCommand(); if ( cmd ) { cmd->execute(); kPresenterDoc()->addCommand( cmd ); } } void KPrView::pgConfOk() { TQValueList selectedSlides; for( unsigned i = 0; i < kPresenterDoc()->pageList().count(); i++ ) { selectedSlides.append( kPresenterDoc()->pageList().at( i )->isSlideSelected() ); } KPrPgConfCmd *pgConfCmd = new KPrPgConfCmd( i18n( "Configure Slide Show" ), pgConfDia->getManualSwitch(), pgConfDia->getInfiniteLoop(), pgConfDia->getShowEndOfPresentationSlide(), pgConfDia->getPresentationDuration(), pgConfDia->getPen(), pgConfDia->getSelectedSlides(), pgConfDia->presentationName(), kPresenterDoc()->spManualSwitch(), kPresenterDoc()->spInfiniteLoop(), kPresenterDoc()->spShowEndOfPresentationSlide(), kPresenterDoc()->presentationDuration(), kPresenterDoc()->presPen(), selectedSlides, kPresenterDoc()->presentationName(), kPresenterDoc() ); pgConfCmd->execute(); kPresenterDoc()->addCommand( pgConfCmd ); TQPtrListIterator it( kPresenterDoc()->pageList() ); for ( ; it.current(); ++it ) updateSideBarItem( it.current() ); } void KPrView::rotateOk() { float _newAngle=rotateDia->angle(); KCommand *cmd=m_canvas->activePage()->rotateSelectedObjects(_newAngle); if( cmd ) kPresenterDoc()->addCommand( cmd ); } void KPrView::shadowOk() { KCommand *cmd=m_canvas->activePage()->shadowObj(shadowDia->shadowDirection(), shadowDia->shadowDistance(), shadowDia->shadowColor()); if( cmd) kPresenterDoc()->addCommand( cmd ); } unsigned int KPrView::getCurrPgNum() const { return currPg + 1; } void KPrView::recalcCurrentPageNum() { KPrPage *activePage = m_canvas->activePage(); TQPtrList pageList( m_pKPresenterDoc->pageList() ); int pos = pageList.tqfindRef( activePage ); if ( pos != -1 ) { currPg = pos; } else { kdDebug(33001) << "KPrView::recalcCurrentPageNum: activePage not found" << endl; currPg = 0; } if( sidebar ) sidebar->setCurrentPage( currPg ); } void KPrView::scrollH( int value ) { if ( !presStarted ) { m_canvas->scrollX( value ); if ( h_ruler ) h_ruler->setOffset( value, 0 ); } } void KPrView::scrollV( int value ) { if ( !presStarted ) { m_canvas->scrollY( value ); if ( v_ruler ) v_ruler->setOffset( 0, value ); } } void KPrView::fontChanged( const TQFont &font ) { tbFont.setFamily( font.family() ); tbFont.setBold( font.bold() ); tbFont.setItalic( font.italic() ); tbFont.setUnderline( font.underline() ); tbFont.setPointSize( font.pointSize() ); actionTextFontFamily->setFont( tbFont.family() ); actionTextFontSize->setFontSize( tbFont.pointSize() ); actionTextBold->setChecked( tbFont.bold() ); actionTextItalic->setChecked( tbFont.italic() ); actionTextUnderline->setChecked( tbFont.underline() ); } void KPrView::colorChanged( const TQColor &color ) { tbColor = color; actionTextColor->setEnabled( true ); actionTextColor->setCurrentColor( tbColor ); } void KPrView::alignChanged( int align ) { if ( align != tbAlign ) { tbAlign = align; if ( ( align & AlignLeft ) == AlignLeft ) { actionTextAlignLeft->blockSignals( true ); actionTextAlignLeft->setChecked( true ); actionTextAlignLeft->blockSignals( false ); } else if ( ( align & AlignHCenter ) == AlignHCenter || ( align & AlignCenter ) == AlignCenter ) { actionTextAlignCenter->blockSignals( true ); actionTextAlignCenter->setChecked( true ); actionTextAlignCenter->blockSignals( false ); } else if ( ( align & AlignRight ) == AlignRight ) { actionTextAlignRight->blockSignals( true ); actionTextAlignRight->setChecked( true ); actionTextAlignRight->blockSignals( false ); } else if ( (align & AlignJustify ) == AlignJustify ) { actionTextAlignBlock->blockSignals( true ); actionTextAlignBlock->setChecked( true ); actionTextAlignBlock->blockSignals( false ); } } } void KPrView::changePicture( const TQString & filename ) { TQStringList mimetypes; mimetypes += KImageIO::mimeTypes( KImageIO::Reading ); mimetypes += KoPictureFilePreview::clipartMimeTypes(); KFileDialog fd( filename, TQString(), this, 0, true ); fd.setCaption(i18n("Select New Picture")); fd.setMimeFilter( mimetypes ); fd.setPreviewWidget( new KoPictureFilePreview( &fd ) ); KURL url; if ( fd.exec() == TQDialog::Accepted ) url = fd.selectedURL(); if( url.isEmpty() || !url.isValid()) return; m_canvas->changePicture( url, m_canvas ); } void KPrView::resizeEvent( TQResizeEvent *e ) { if ( !presStarted ) TQWidget::resizeEvent( e ); TQSize s = e ? e->size() : size(); splitter->setGeometry( 0, 0, s.width(), s.height() ); } void KPrView::reorganize() { if (m_bShowGUI ) { horz->show(); vert->show(); pgNext->show(); pgPrev->show(); if(kPresenterDoc()->showRuler()) { int hSpace = v_ruler->tqminimumSizeHint().width(); int vSpace = h_ruler->tqminimumSizeHint().height(); m_canvas->move( hSpace, vSpace ); if ( h_ruler ) { h_ruler->show(); h_ruler->setGeometry( hSpace, 0, m_canvas->width(), vSpace ); } if (v_ruler ) { v_ruler->show(); v_ruler->setGeometry( 0, vSpace, hSpace, m_canvas->height() ); } if(getTabChooser()) { getTabChooser()->setGeometry(0, 0, hSpace, vSpace); getTabChooser()->show(); } } else { m_canvas->move( 0, 0 ); if ( h_ruler ) h_ruler->hide(); if ( v_ruler ) v_ruler->hide(); getTabChooser()->hide(); } if( statusBar()) { if(m_pKPresenterDoc->showStatusBar()) statusBar()->show(); else statusBar()->hide(); } setRanges(); } else { horz->hide(); vert->hide(); pgNext->hide(); pgPrev->hide(); h_ruler->hide(); v_ruler->hide(); getTabChooser()->hide(); m_canvas->move( 0, 0 ); } } void PageBase::resizeEvent( TQResizeEvent *e ) { if ( !view->presStarted ) TQWidget::resizeEvent( e ); TQSize s = e ? e->size() : size(); if ( view->m_bShowGUI ) { int hSpace = view->getVRuler()->tqminimumSizeHint().width(); int vSpace = view->getVRuler()->tqminimumSizeHint().height(); view->m_canvas->resize( s.width() - ( hSpace + 16 ), s.height() - ( vSpace + 16 ) ); view->vert->setGeometry( s.width() - 16, 0, 16, s.height() - 32 ); view->pgPrev->setGeometry( s.width() - 15, s.height() - 32, 15, 16 ); view->pgNext->setGeometry( s.width() - 15, s.height() - 16, 15, 16 ); view->horz->setGeometry( 0, s.height() - 16, s.width() - 16, 16 ); } else { view->m_canvas->move( 0, 0 ); view->m_canvas->resize( s.width(), s.height() ); } view->reorganize(); } void KPrView::dragEnterEvent( TQDragEnterEvent *e ) { TQApplication::sendEvent( m_canvas, e ); } void KPrView::dragMoveEvent( TQDragMoveEvent *e ) { TQApplication::sendEvent( m_canvas, e ); } void KPrView::dragLeaveEvent( TQDragLeaveEvent *e ) { TQApplication::sendEvent( m_canvas, e ); } void KPrView::dropEvent( TQDropEvent *e ) { TQApplication::sendEvent( m_canvas, e ); } void KPrView::getPageMouseWheelEvent( TQWheelEvent *e ) { TQApplication::sendEvent( vert, e ); } void KPrView::keyPressEvent( TQKeyEvent *e ) { if ( e->key() == TQt::Key_Delete && !m_canvas->currentTextObjectView() ) editDelete(); else TQApplication::sendEvent( m_canvas, e ); } void KPrView::doAutomaticScreenPres() { if ( m_autoPresStop ) // A user pushed Escape key or clicked "Exit presentation" menu. return; else if ( m_autoPresRestart && kPresenterDoc()->spInfiniteLoop() ) { m_autoPresRestart = false; m_canvas->presGotoFirstPage(); // return to first page. } else screenNext(); } void KPrView::updateReadWrite( bool readwrite ) { // First disable or enable everything TQValueList actions = actionCollection()->actions(); // Also grab actions from the document actions += m_pKPresenterDoc->actionCollection()->actions(); TQValueList::ConstIterator aIt = actions.begin(); TQValueList::ConstIterator aEnd = actions.end(); for (; aIt != aEnd; ++aIt ) (*aIt)->setEnabled( readwrite ); if ( !readwrite ) { // Readonly -> re-enable a few harmless actions refreshPageButton(); actionViewFormattingChars->setEnabled( true ); actionViewZoom->setEnabled( true ); actionEditFind->setEnabled( true ); actionEditFindNext->setEnabled( true ); actionEditFindPrevious->setEnabled( true ); actionEditReplace->setEnabled( true ); actionEditSelectAll->setEnabled( true ); actionEditDeSelectAll->setEnabled( true ); } else { refreshPageButton(); objectSelectedChanged(); refreshCustomMenu(); // Correctly enable or disable undo/redo actions again m_pKPresenterDoc->commandHistory()->updateActions(); updateSideBarMenu(); } } void KPrView::setupPopupMenus() { // create right button line begin rb_lbegin = new TQPopupMenu(); Q_CHECK_PTR( rb_lbegin ); rb_lbegin->insertItem( KPBarIcon("line_normal_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginNormal() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_arrow_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginArrow() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_rect_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginRect() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_circle_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginCircle() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_line_arrow_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginLineArrow() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_dimension_line_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginDimensionLine() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_double_arrow_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginDoubleArrow() ) ); rb_lbegin->insertSeparator(); rb_lbegin->insertItem( KPBarIcon("line_double_line_arrow_begin" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineBeginDoubleLineArrow() ) ); rb_lbegin->setMouseTracking( true ); rb_lbegin->setCheckable( false ); // create right button line end rb_lend = new TQPopupMenu(); Q_CHECK_PTR( rb_lend ); rb_lend->insertItem( KPBarIcon("line_normal_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndNormal() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_arrow_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndArrow() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_rect_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndRect() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_circle_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndCircle() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_line_arrow_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndLineArrow() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_dimension_line_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndDimensionLine() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_double_arrow_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndDoubleArrow() ) ); rb_lend->insertSeparator(); rb_lend->insertItem( KPBarIcon("line_double_line_arrow_end" ), TQT_TQOBJECT(this), TQT_SLOT( extraLineEndDoubleLineArrow() ) ); rb_lend->setMouseTracking( true ); rb_lend->setCheckable( false ); // create arrange-objects popup m_arrangeObjectsPopup = new TQPopupMenu(); Q_CHECK_PTR(m_arrangeObjectsPopup); m_arrangeObjectsPopup->insertItem(KPBarIcon("lower"), TQT_TQOBJECT(this), TQT_SLOT(extraLower())); m_arrangeObjectsPopup->insertSeparator(); m_arrangeObjectsPopup->insertItem(KPBarIcon("send_backward"), TQT_TQOBJECT(this), TQT_SLOT(extraSendBackward())); m_arrangeObjectsPopup->insertSeparator(); m_arrangeObjectsPopup->insertItem(KPBarIcon("bring_forward"), TQT_TQOBJECT(this), TQT_SLOT(extraBringForward())); m_arrangeObjectsPopup->insertSeparator(); m_arrangeObjectsPopup->insertItem(KPBarIcon("raise"), TQT_TQOBJECT(this), TQT_SLOT(extraRaise())); m_arrangeObjectsPopup->setMouseTracking(true); m_arrangeObjectsPopup->setCheckable(false); // create insert-line popup actionToolsLinePopup->insert(actionToolsLine); actionToolsLinePopup->insert(actionToolsFreehand); actionToolsLinePopup->insert(actionToolsPolyline); actionToolsLinePopup->insert(actionToolsCubicBezierCurve); actionToolsLinePopup->insert(actionToolsQuadricBezierCurve); // create insert-tqshape popup actionToolsShapePopup->insert(actionToolsRectangle); actionToolsShapePopup->insert(actionToolsCircleOrEllipse); actionToolsShapePopup->insert(actionToolsPie); actionToolsShapePopup->insert(actionToolsConvexOrConcavePolygon); // create insert-closed-line popup actionToolsClosedLinePopup->insert(actionToolsClosedFreehand); actionToolsClosedLinePopup->insert(actionToolsClosedPolyline); actionToolsClosedLinePopup->insert(actionToolsClosedQuadricBezierCurve); actionToolsClosedLinePopup->insert(actionToolsClosedCubicBezierCurve); actionExtraAlignObjsPopup->insert( actionExtraAlignObjLeft ); actionExtraAlignObjsPopup->insert( actionExtraAlignObjCenterV ); actionExtraAlignObjsPopup->insert( actionExtraAlignObjRight ); actionExtraAlignObjsPopup->insert( actionExtraAlignObjTop ); actionExtraAlignObjsPopup->insert( actionExtraAlignObjCenterH ); actionExtraAlignObjsPopup->insert( actionExtraAlignObjBottom ); actionExtraArrangePopup->insert( actionExtraLower ); actionExtraArrangePopup->insert( actionExtraSendBackward ); actionExtraArrangePopup->insert( actionExtraBringForward ); actionExtraArrangePopup->insert( actionExtraRaise ); } void KPrView::setupScrollbars() { vert = new TQScrollBar( Qt::Vertical, pageBase ); horz = new TQScrollBar( Qt::Horizontal, pageBase ); vert->show(); horz->show(); TQObject::connect( vert, TQT_SIGNAL( valueChanged( int ) ), TQT_TQOBJECT(this), TQT_SLOT( scrollV( int ) ) ); TQObject::connect( horz, TQT_SIGNAL( valueChanged( int ) ), TQT_TQOBJECT(this), TQT_SLOT( scrollH( int ) ) ); vert->setValue(vert->maxValue()); horz->setValue(horz->maxValue()); vert->setValue(vert->minValue()); horz->setValue(horz->minValue()); pgNext = new TQToolButton( pageBase ); pgNext->setPixmap( TQPixmap( pagedown_xpm ) ); pgNext->setAutoRepeat( TRUE ); TQToolTip::add( pgNext, i18n( "Next slide" ) ); connect( pgNext, TQT_SIGNAL( clicked() ), TQT_TQOBJECT(this), TQT_SLOT( nextPage() ) ); pgPrev = new TQToolButton( pageBase ); pgPrev->setPixmap( TQPixmap( pageup_xpm ) ); pgPrev->setAutoRepeat( TRUE ); TQToolTip::add( pgPrev, i18n( "Previous slide" ) ); connect( pgPrev, TQT_SIGNAL( clicked() ), TQT_TQOBJECT(this), TQT_SLOT( prevPage() ) ); } void KPrView::setupRulers() { tabChooser = new KoTabChooser( pageBase, KoTabChooser::TAB_ALL ); tabChooser->setReadWrite(kPresenterDoc()->isReadWrite()); h_ruler = new KoRuler( pageBase, m_canvas, Qt::Horizontal, kPresenterDoc()->pageLayout(), KoRuler::F_INDENTS | KoRuler::F_TABS, kPresenterDoc()->unit(), tabChooser ); h_ruler->changeFlags(0); h_ruler->setReadWrite(kPresenterDoc()->isReadWrite()); v_ruler = new KoRuler( pageBase, m_canvas, Qt::Vertical, kPresenterDoc()->pageLayout(), 0, kPresenterDoc()->unit() ); v_ruler->setReadWrite(kPresenterDoc()->isReadWrite()); int hSpace = v_ruler->tqminimumSizeHint().width(); int vSpace = h_ruler->tqminimumSizeHint().height(); m_canvas->resize( m_canvas->width() - hSpace, m_canvas->height() - vSpace ); m_canvas->move( hSpace, vSpace ); h_ruler->setGeometry( hSpace, 0, m_canvas->width(), vSpace ); v_ruler->setGeometry( 0, vSpace, hSpace, m_canvas->height() ); TQObject::connect( h_ruler, TQT_SIGNAL( unitChanged( KoUnit::Unit ) ), TQT_TQOBJECT(this), TQT_SLOT( unitChanged( KoUnit::Unit ) ) ); TQObject::connect( h_ruler, TQT_SIGNAL( newPageLayout( const KoPageLayout & ) ), TQT_TQOBJECT(this), TQT_SLOT( newPageLayout( const KoPageLayout & ) ) ); connect( h_ruler, TQT_SIGNAL( doubleClicked() ), this, TQT_SLOT( slotHRulerDoubleClicked() ) ); connect( h_ruler, TQT_SIGNAL( doubleClicked(double) ), this, TQT_SLOT( slotHRulerDoubleClicked(double) ) ); TQObject::connect( v_ruler, TQT_SIGNAL( unitChanged( KoUnit::Unit ) ), TQT_TQOBJECT(this), TQT_SLOT( unitChanged( KoUnit::Unit ) ) ); TQObject::connect( v_ruler, TQT_SIGNAL( newPageLayout( const KoPageLayout & ) ), TQT_TQOBJECT(this), TQT_SLOT( newPageLayout( const KoPageLayout & ) ) ); TQObject::connect( v_ruler, TQT_SIGNAL( doubleClicked() ), TQT_TQOBJECT(this), TQT_SLOT( openPageLayoutDia() ) ); connect( h_ruler, TQT_SIGNAL( newLeftIndent( double ) ), TQT_TQOBJECT(this), TQT_SLOT( newLeftIndent( double ) ) ); connect( h_ruler, TQT_SIGNAL( newFirstIndent( double ) ), TQT_TQOBJECT(this), TQT_SLOT( newFirstIndent( double ) ) ); connect( h_ruler, TQT_SIGNAL( newRightIndent( double ) ), TQT_TQOBJECT(this), TQT_SLOT( newRightIndent( double ) ) ); } void KPrView::unitChanged( KoUnit::Unit u ) { m_pKPresenterDoc->setUnit( u ); } void KPrView::setRanges() { if ( vert && horz && m_canvas && m_pKPresenterDoc ) { vert->setSteps( 10, m_canvas->height() ); vert->setRange( 0, TQMAX( 0, m_canvas->activePage()->getZoomPageRect().height() - m_canvas->height() ) ); horz->setSteps( 10, m_canvas->width() ); horz->setRange( 0, TQMAX( 0, m_canvas->activePage()->getZoomPageRect().width() + 16 - m_canvas->width() ) ); } } void KPrView::skipToPage( int num ) { setEditMaster( false ); if ( num < 0 || num > static_cast( m_pKPresenterDoc->getPageNums() ) - 1 || !m_canvas ) return; m_canvas->exitEditMode(); currPg = num; emit currentPageChanged( currPg ); if( sidebar ) sidebar->setCurrentPage( currPg ); KPrPage* page = m_pKPresenterDoc->pageList().at( currPg ); m_canvas->setActivePage( page ); // don't scroll before new active page is set, // the page active until then might have been deleted vert->setValue( 0 ); horz->setValue( 0 ); if ( notebar ) { TQString text = page->noteText( ); notebar->setCurrentNoteText( text ); } refreshPageButton(); //(Laurent) deselect object when we change page. //otherwise you can change object properties on other page deSelectAllObjects(); m_pKPresenterDoc->tqrepaint( FALSE ); m_pKPresenterDoc->displayActivePage( page ); } void KPrView::refreshPageButton() { bool state = (currPg > 0); pgPrev->setEnabled( state ); actionScreenFirst->setEnabled(state); actionScreenPrev->setEnabled(state); state=(currPg < (int)m_pKPresenterDoc->getPageNums() - 1); pgNext->setEnabled( state ); actionScreenLast->setEnabled(state); actionScreenNext->setEnabled(state); updateHeaderFooterButton(); updateDisplayObjectMasterPageButton(); updateDisplayBackgroundButton(); } void KPrView::showObjectRect( const KPrObject * object ) { TQRect r = zoomHandler()->zoomRect( object->getRealRect() ); if ( ! TQRect( getCanvas()->diffx(), getCanvas()->diffy(), getCanvas()->width(), getCanvas()->height() ).tqcontains( r ) ) { int x = r.left() - 20; int y = r.top() - 20; if ( x < 0 ) { x = 0; } if ( y < 0 ) { y = 0; } horz->setValue( x ); vert->setValue( y ); } } void KPrView::setTool( ToolEditMode toolEditMode ) { switch ( toolEditMode ) { case TEM_MOUSE: actionToolsMouse->setChecked( true ); break; case TEM_ROTATE: actionToolsRotate->setChecked( true ); break; case TEM_ZOOM: actionToolsZoom->setChecked( true ); break; case INS_LINE: actionToolsLine->setChecked( true ); break; case INS_RECT: actionToolsRectangle->setChecked( true ); break; case INS_ELLIPSE: actionToolsCircleOrEllipse->setChecked( true ); break; case INS_PIE: actionToolsPie->setChecked( true ); break; case INS_DIAGRAMM: actionToolsDiagramm->setChecked( true ); break; case INS_TABLE: actionToolsTable->setChecked( true ); break; case INS_FORMULA: actionToolsFormula->setChecked( true ); break; case INS_TEXT: actionToolsText->setChecked( true ); break; case INS_AUTOFORM: actionToolsAutoform->setChecked( true ); break; default: // Shut up gcc -Wall break; // Shut up gcc 3.x } } void KPrView::setRulerMouseShow( bool _show ) { v_ruler->showMousePos( _show ); h_ruler->showMousePos( _show ); } void KPrView::setRulerMousePos( int mx, int my ) { v_ruler->setMousePos( mx, my ); h_ruler->setMousePos( mx, my ); } void KPrView::enableWebPres() { } void KPrView::enableMSPres() { } bool KPrView::doubleClickActivation() const { return true; } TQWidget* KPrView::canvas() const { return m_canvas; } int KPrView::canvasXOffset() const { return m_canvas->diffx(); } int KPrView::canvasYOffset() const { return m_canvas->diffy(); } void KPrView::setCanvasXOffset( int _x ) { m_canvas->setDiffX( _x ); } void KPrView::setCanvasYOffset( int _y ) { m_canvas->setDiffY( _y ); } int KPrView::getCurrentPresPage() const { if ( !presStarted ) return -1; return m_canvas->presPage(); } int KPrView::getCurrentPresStep() const { if ( !presStarted ) return -1; return m_canvas->presStep(); } int KPrView::getPresStepsOfPage() const { if ( !presStarted ) return -1; return m_canvas->numPresSteps(); } int KPrView::getNumPresPages() const { if ( !presStarted ) return -1; return m_canvas->numPresPages(); } bool KPrView::gotoPresPage( int pg ) { if ( !presStarted ) return false; m_canvas->gotoPage( pg ); return true; } void KPrView::nextPage() { // don't move when on master if ( m_editMaster ) return; if ( currPg >= (int)m_pKPresenterDoc->getPageNums() - 1 ) return; //kdDebug(33001)<<"currPg :"<getPageNums() :"<getPageNums()<blockSignals( TRUE ); sidebar->thumbBar()->uptodate = false; sidebar->outline()->rebuildItems(); sidebar->thumbBar()->rebuildItems(); sidebar->blockSignals( FALSE ); } } void KPrView::updateSideBarItem( KPrPage * page ) { if ( sidebar ) sidebar->updateItem( page ); m_pKPresenterDoc->recalcVariables( VT_STATISTIC ); } void KPrView::addSideBarItem( int pos ) { if ( sidebar ) { sidebar->blockSignals( TRUE ); sidebar->addItem( pos ); sidebar->blockSignals( FALSE ); } } void KPrView::moveSideBarItem( int oldPos, int newPos ) { if ( sidebar ) { sidebar->blockSignals( TRUE ); sidebar->moveItem( oldPos, newPos ); sidebar->blockSignals( FALSE ); } } void KPrView::removeSideBarItem( int pos ) { if ( sidebar ) { sidebar->blockSignals( TRUE ); sidebar->removeItem( pos ); sidebar->blockSignals( FALSE ); } } void KPrView::updatePageInfo() { if (m_sbPageLabel) m_sbPageLabel->setText( TQString(" ") + i18n("Slide %1/%2").tqarg(getCurrPgNum()).tqarg(m_pKPresenterDoc->getPageNums())+ TQString(" ") ); } void KPrView::updateObjectStatusBarItem() { KStatusBar * sb = statusBar(); int nbObjects = m_canvas->objNums(); if ( m_pKPresenterDoc->showStatusBar() && sb && nbObjects > 0 ) { int nbSelected = m_canvas->numberOfObjectSelected(); if (nbSelected == 1) { KoUnit::Unit unit = m_pKPresenterDoc->unit(); //TQString unitName = m_pKPresenterDoc->unitName(); KPrObject * obj = m_canvas->getSelectedObj(); KoSize size = obj->getSize(); m_sbObjectLabel->setText( ' ' + i18n( "Statusbar info", "%1: %2, %3 - %4, %5 (width: %6, height: %7)" ) .tqarg( /*frame->frameSet()->name()*/obj->getObjectName() ) .tqarg( KoUnit::toUserStringValue( obj->getOrig().x(), unit ) ) .tqarg( KoUnit::toUserStringValue( obj->getOrig().y() , unit) ) .tqarg( KoUnit::toUserStringValue( obj->getOrig().x() + size.width(), unit ) ) .tqarg( KoUnit::toUserStringValue( obj->getOrig().y() + size.height(), unit ) ) .tqarg( KoUnit::toUserStringValue( size.width(), unit ) ) .tqarg( KoUnit::toUserStringValue( size.height(), unit ) ) ); } else m_sbObjectLabel->setText( i18n("1 object selected", "%n objects selected", nbSelected) ); } else if ( sb && m_sbObjectLabel ) m_sbObjectLabel->setText( TQString() ); } void KPrView::pageNumChanged() { updatePageInfo(); } void KPrView::viewShowSideBar() { if ( !sidebar ) return; if ( sidebar->isVisible() ) sidebar->hide(); else sidebar->show(); } void KPrView::viewShowNoteBar() { if ( !notebar ) return; if ( notebar->isVisible() ) notebar->hide(); else notebar->show(); } void KPrView::viewSlideMaster() { bool state = actionViewSlideMaster->isChecked(); setEditMaster( state ); //not activate action when slide master is displaying state = !state; m_actionExtraHeader->setEnabled( state ); m_actionExtraFooter->setEnabled( state ); actionDisplayBackgroundPage->setEnabled( state ); actionDisplayObjectFromMasterPage->setEnabled( state ); } void KPrView::setEditMaster( bool editMaster ) { if ( m_editMaster != editMaster ) { m_canvas->exitEditMode(); m_canvas->deSelectAllObj(); m_editMaster = editMaster; if ( m_editMaster ) { m_canvas->setActivePage( m_pKPresenterDoc->masterPage() ); pgPrev->setEnabled( false ); actionScreenFirst->setEnabled( false ); actionScreenPrev->setEnabled( false ); pgNext->setEnabled( false ); actionScreenLast->setEnabled( false ); actionScreenNext->setEnabled( false ); actionEditCopyPage->setEnabled( false ); actionEditDuplicatePage->setEnabled( false ); actionEditDelPage->setEnabled( false ); actionViewSlideMaster->setChecked( true ); } else { m_canvas->setActivePage( m_pKPresenterDoc->pageList().at( currPg ) ); actionEditCopyPage->setEnabled( true ); actionEditDuplicatePage->setEnabled( true ); actionEditDelPage->setEnabled( m_pKPresenterDoc->getPageNums() > 1 ); actionViewSlideMaster->setChecked( false ); refreshPageButton(); } if ( sidebar ) sidebar->setViewMasterPage( m_editMaster ); updateNoteBarText(); m_canvas->tqrepaint( false ); } } void KPrView::updateNoteBarText() { if ( notebar ) { if ( m_editMaster ) { TQString text = m_pKPresenterDoc->masterPage()->noteText(); notebar->setCurrentNoteText( text ); } else { TQString text = m_pKPresenterDoc->pageList().at( currPg )->noteText( ); notebar->setCurrentNoteText( text ); } } } void KPrView::openPopupMenuMenuPage( const TQPoint & _point ) { if(!koDocument()->isReadWrite() || !factory()) return; TQPtrList actionList= TQPtrList(); KActionSeparator *separator=new KActionSeparator(); switch( m_canvas->activePage()->getBackType()) { case BT_COLOR: case BT_BRUSH: break; case BT_PICTURE: case BT_CLIPART: actionList.append(separator); actionList.append(actionSaveBackgroundPicture); break; } if ( actionList.count()>0) plugActionList( "picture_action", actionList ); m_mousePos = m_canvas->mapFromGlobal( _point ); TQPopupMenu* menu = dynamic_cast(factory()->container("menupage_popup",this)); if ( menu ) menu->exec(_point); m_mousePos = TQPoint( 0, 0 ); unplugActionList( "picture_action" ); delete separator; } void KPrView::openPopupMenuObject( const TQString & name, const TQPoint & _point ) { if(!koDocument()->isReadWrite() || !factory()) return; dynamic_cast(factory()->container(name, this))->popup(_point); } void KPrView::openPopupMenuSideBar(const TQPoint & _point) { if(!koDocument()->isReadWrite() || !factory()) return; dynamic_cast(factory()->container("sidebarmenu_popup", this))->popup(_point); } void KPrView::renamePageTitle() { if(sidebar) sidebar->renamePageTitle(); } void KPrView::picViewOriginalSize() { m_canvas->picViewOriginalSize(); } void KPrView::picViewOrig640x480() { m_canvas->picViewOrig640x480(); } void KPrView::picViewOrig800x600() { m_canvas->picViewOrig800x600(); } void KPrView::picViewOrig1024x768() { m_canvas->picViewOrig1024x768(); } void KPrView::picViewOrig1280x1024() { m_canvas->picViewOrig1280x1024(); } void KPrView::picViewOrig1600x1200() { m_canvas->picViewOrig1600x1200(); } void KPrView::chPic() { m_canvas->chPic(); } void KPrView::penColorChanged( const KoPen & _pen ) { //actionPenColor->setEnabled( true ); actionPenColor->setCurrentColor( _pen.color() ); } void KPrView::brushColorChanged( const TQBrush & _brush ) { //actionBrushColor->setEnabled( true ); actionBrushColor->setCurrentColor(_brush.style ()==TQt::NoBrush ? TQt::white : _brush.color() ); } void KPrView::restartAutoPresTimer() { m_autoPresTime.start(); m_autoPresElapsedTime = 0; m_autoPresTimer.start( m_autoPresTimerValue, true ); } void KPrView::continueAutoPresTimer() { m_autoPresTime.restart(); //m_autoPresTimer.changeInterval( m_autoPresTimerValue - m_autoPresElapsedTime ); m_autoPresTimer.start( m_autoPresTimerValue - m_autoPresElapsedTime, true ); } void KPrView::stopAutoPresTimer() { m_autoPresTimer.stop(); m_autoPresElapsedTime += m_autoPresTime.elapsed(); } void KPrView::setAutoPresTimer( int sec ) { m_autoPresTimerValue = sec * 1000; restartAutoPresTimer(); } void KPrView::insertSpecialChar() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) return; TQString f = edit->textFontFamily(); TQChar c=' '; if (m_specialCharDlg==0) { m_specialCharDlg = new KoCharSelectDia( this, "insert special char", f, c, false ); connect( m_specialCharDlg, TQT_SIGNAL(insertChar(TQChar,const TQString &)), TQT_TQOBJECT(this), TQT_SLOT(slotSpecialChar(TQChar,const TQString &))); connect( m_specialCharDlg, TQT_SIGNAL( finished() ), TQT_TQOBJECT(this), TQT_SLOT( slotSpecialCharDlgClosed() ) ); } m_specialCharDlg->show(); } void KPrView::slotSpecialCharDlgClosed() { if ( m_specialCharDlg) { disconnect( m_specialCharDlg, TQT_SIGNAL(insertChar(TQChar,const TQString &)), TQT_TQOBJECT(this), TQT_SLOT(slotSpecialChar(TQChar,const TQString &))); disconnect( m_specialCharDlg, TQT_SIGNAL( finished() ), TQT_TQOBJECT(this), TQT_SLOT( slotSpecialCharDlgClosed() ) ); m_specialCharDlg->deleteLater(); m_specialCharDlg = 0L; } } void KPrView::slotSpecialChar(TQChar c, const TQString &_font) { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) return; edit->insertSpecialChar(c, _font); } void KPrView::insertLink() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) return; TQString link; TQString ref; if ( edit->textObject()->hasSelection() ) { TQString selectedText = edit->textObject()->selectedText(); if ( edit->textObject()->selectionHasCustomItems() || selectedText.tqcontains('\n') ) return; if ( selectedText.startsWith( "mailto:/" ) || selectedText.startsWith( "ftp:/" ) || selectedText.startsWith( "http:/" ) ) { link=selectedText; ref = selectedText; } else { //Just add text as link name and not url link = selectedText; } } if(KoInsertLinkDia::createLinkDia(link, ref, TQStringList(), false, this)) { if(!link.isEmpty() && !ref.isEmpty()) edit->insertLink(link, ref); } } void KPrView::changeLink() { KPrTextView * edit = m_canvas->currentTextObjectView(); if ( edit ) { KoLinkVariable * var=edit->linkVariable(); if(var) { TQString oldhref= var->url(); TQString oldLinkName=var->value(); TQString link=oldLinkName; TQString ref=oldhref; if(KoInsertLinkDia::createLinkDia(link, ref, TQStringList(), false, this)) { if(!link.isEmpty() && !ref.isEmpty()) { if( ref != oldhref || link!=oldLinkName) { KPrChangeLinkVariable*cmd=new KPrChangeLinkVariable( i18n("Change Link"), m_pKPresenterDoc, oldhref, ref, oldLinkName,link, var); cmd->execute(); m_pKPresenterDoc->addCommand(cmd); } } } } } } void KPrView::showFormat( const KoTextFormat ¤tFormat ) { actionTextFontFamily->setFont( currentFormat.font().family() ); actionTextFontSize->setFontSize( currentFormat.pointSize() ); actionTextBold->setChecked( currentFormat.font().bold()); actionTextItalic->setChecked( currentFormat.font().italic() ); actionTextUnderline->setChecked( currentFormat.underline()); actionFormatStrikeOut->setChecked( currentFormat.strikeOut()); actionBrushColor->setEnabled(true); //actionBrushColor->setText(i18n("Text Background Color...")); switch(currentFormat.vAlign()) { case KoTextFormat::AlignSuperScript: { actionFormatSub->setChecked( false ); actionFormatSuper->setChecked( true ); break; } case KoTextFormat::AlignSubScript: { actionFormatSub->setChecked( true ); actionFormatSuper->setChecked( false ); break; } case KoTextFormat::AlignNormal: default: { actionFormatSub->setChecked( false ); actionFormatSuper->setChecked( false ); break; } } } void KPrView::slotSoftHyphen() { KPrTextView *edit = m_canvas->currentTextObjectView(); if ( edit ) edit->insertSoftHyphen(); } void KPrView::slotNonbreakingSpace() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->insertNonbreakingSpace(); } void KPrView::slotNonbreakingHyphen() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->insertNonbreakingHyphen(); } void KPrView::slotLineBreak() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->insertLineBreak(); } void KPrView::slotIncreaseNumberingLevel() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { edit->increaseNumberingLevel( m_pKPresenterDoc->styleCollection() ); } } void KPrView::slotDecreaseNumberingLevel() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->decreaseNumberingLevel( m_pKPresenterDoc->styleCollection() ); } void KPrView::extraAutoFormat() { m_pKPresenterDoc->getAutoFormat()->readConfig(); KoAutoFormatDia dia( this, 0, m_pKPresenterDoc->getAutoFormat() ); dia.exec(); m_pKPresenterDoc->startBackgroundSpellCheck(); // will do so if enabled } void KPrView::slotSpellCheck() { if (m_spell.kospell) return; // Already in progress //m_doc->setReadWrite(false); // prevent editing text - not anymore m_spell.macroCmdSpellCheck = 0L; m_spell.replaceAll.clear(); TQValueList objects; KPrTextView *edit=m_canvas->currentTextObjectView(); int options = 0; if ( edit && edit->textObject()->hasSelection() ) { objects.append(edit->kpTextObject()->textObject()); options = KFindDialog::SelectedText; } else { objects = spellAddTextObject(); TQPtrList lstObj; } if ( ! objects.empty() ) { m_spell.textIterator = new KoTextIterator( objects, edit, options ); startKSpell(); } } TQValueList KPrView::spellAddTextObject() const { TQValueList lst; TQPtrList lstObj; m_canvas->activePage()->getAllObjectSelectedList(lstObj, true); TQPtrListIterator it( lstObj ); for ( ; it.current() ; ++it ) { if(it.current()->getType()==OT_TEXT) { KPrTextObject* tmp = dynamic_cast(it.current() ); if ( tmp && !tmp->isProtectContent()) lst.append( tmp->textObject() ); } } return lst; } void KPrView::startKSpell() { // m_spellCurrFrameSetNum is supposed to be set by the caller of this method if ( !m_spell.kospell ) m_spell.kospell = new KoSpell( m_broker, TQT_TQOBJECT(this) ); m_spell.kospell->check( m_spell.textIterator, true ); delete m_spell.dlg; m_spell.dlg = new KSpell2::Dialog( m_spell.kospell, this ); m_spell.dlg->activeAutoCorrect( true ); TQObject::connect( m_spell.dlg, TQT_SIGNAL(misspelling(const TQString&, int)), TQT_TQOBJECT(this), TQT_SLOT(spellCheckerMisspelling(const TQString&, int)) ); TQObject::connect( m_spell.dlg, TQT_SIGNAL(tqreplace(const TQString&, int, const TQString&)), TQT_TQOBJECT(this), TQT_SLOT(spellCheckerCorrected(const TQString&, int, const TQString&)) ); TQObject::connect( m_spell.dlg, TQT_SIGNAL(done(const TQString&) ), TQT_TQOBJECT(this), TQT_SLOT(spellCheckerDone(const TQString&)) ); TQObject::connect( m_spell.dlg, TQT_SIGNAL(cancel() ), TQT_TQOBJECT(this), TQT_SLOT( spellCheckerCancel() ) ); TQObject::connect( m_spell.dlg, TQT_SIGNAL(autoCorrect(const TQString &, const TQString & ) ), TQT_TQOBJECT(this), TQT_SLOT( spellAddAutoCorrect (const TQString &, const TQString &) ) ); m_spell.dlg->show(); } void KPrView::spellCheckerCancel() { kdDebug()<<"void KPrView::spellCheckerCancel() \n"; spellCheckerRemoveHighlight(); clearSpellChecker(true); } void KPrView::spellCheckerRemoveHighlight() { KoTextObject* textobj = m_spell.kospell->currentTextObject(); if ( textobj ) { KPrTextDocument *textdoc=static_cast( textobj->textDocument() ); if ( textdoc ) textdoc->textObject()->removeHighlight(); } KPrTextView *edit=m_canvas->currentTextObjectView(); if (edit) edit->drawCursor( TRUE ); } void KPrView::clearSpellChecker(bool cancelSpellCheck) { kdDebug() << "KPrView::clearSpellChecker()" << endl; delete m_spell.textIterator; m_spell.textIterator = 0L; delete m_spell.kospell; m_spell.kospell = 0; m_initSwitchPage = -1; m_switchPage = -1; if ( m_spell.macroCmdSpellCheck ) { if ( !cancelSpellCheck ) m_pKPresenterDoc->addCommand(m_spell.macroCmdSpellCheck); else { //reverte all changes m_spell.macroCmdSpellCheck->unexecute(); delete m_spell.macroCmdSpellCheck; } } m_spell.macroCmdSpellCheck=0L; m_spell.replaceAll.clear(); } void KPrView::spellCheckerMisspelling( const TQString &old, int pos ) { //kdDebug(32001) << "KWView::spellCheckerMisspelling old=" << old << " pos=" << pos << endl; KoTextObject* textobj = m_spell.kospell->currentTextObject(); KoTextParag* parag = m_spell.kospell->currentParag(); Q_ASSERT( textobj ); Q_ASSERT( parag ); if ( !textobj || !parag ) return; KPrTextDocument *textdoc=static_cast( textobj->textDocument() ); Q_ASSERT( textdoc ); if ( !textdoc ) return; pos += m_spell.kospell->currentStartIndex(); kdDebug() << "KWView::spellCheckerMisspelling parag=" << parag->paragId() << " pos=" << pos << " length=" << old.length() << endl; textdoc->textObject()->highlightPortion( parag, pos, old.length(), m_canvas,true/*tqrepaint*/ ); } void KPrView::spellCheckerCorrected( const TQString &old, int pos, const TQString &corr ) { //kdDebug(33001) << "KWView::spellCheckerCorrected old=" << old << " corr=" << corr << " pos=" << pos << endl; //kdDebug(32001) << "KWView::spellCheckerCorrected old=" << old << " corr=" << corr << " pos=" << pos << endl; KoTextObject* textobj = m_spell.kospell->currentTextObject(); KoTextParag* parag = m_spell.kospell->currentParag(); Q_ASSERT( textobj ); Q_ASSERT( parag ); if ( !textobj || !parag ) return; KPrTextDocument *textdoc=static_cast( textobj->textDocument() ); Q_ASSERT( textdoc ); if ( !textdoc ) return; pos += m_spell.kospell->currentStartIndex(); textdoc->textObject()->highlightPortion( parag, pos, old.length(), m_canvas,true/*tqrepaint*/ ); KoTextCursor cursor( textdoc ); cursor.setParag( parag ); cursor.setIndex( pos ); if(!m_spell.macroCmdSpellCheck) m_spell.macroCmdSpellCheck=new KMacroCommand(i18n("Correct Misspelled Word")); m_spell.macroCmdSpellCheck->addCommand(textobj->replaceSelectionCommand(&cursor, corr, TQString(), KoTextDocument::HighlightSelection)); } void KPrView::spellCheckerDone( const TQString & ) { /* See also KWView::spellCheckerDone from KWord */ kdDebug() << "KPrView::spellCheckerDone" << endl; KPrTextDocument *textdoc=static_cast( m_spell.kospell->textDocument() ); Q_ASSERT( textdoc ); if ( textdoc ) textdoc->textObject()->removeHighlight(); clearSpellChecker(); } void KPrView::showCounter( KoParagCounter &c ) { TQString styleStr("counterstyle_"); styleStr += TQString::number( c.style() ); //kdDebug(33001) << "KWView::showCounter styleStr=" << styleStr << endl; KToggleAction* act = static_cast( actionCollection()->action( styleStr.latin1() ) ); Q_ASSERT( act ); if ( act ) act->setChecked( true ); } void KPrView::formatParagraph() { showParagraphDialog(); } void KPrView::showParagraphDialog(int initialPage, double initialTabPos) { TQPtrList lst = m_canvas->applicableTextInterfaces(); if ( lst.isEmpty() ) return; TQPtrList lstObjects = m_canvas->applicableTextObjects(); if ( lstObjects.isEmpty() ) return; delete m_paragDlg; m_paragDlg = new KoParagDia( this, "", KoParagDia::PD_SPACING | KoParagDia::PD_ALIGN | KoParagDia::PD_DECORATION | KoParagDia::PD_NUMBERING | KoParagDia::PD_TABS, m_pKPresenterDoc->unit(), lstObjects.first()->getSize().width(),false ); m_paragDlg->setCaption( i18n( "Paragraph Settings" ) ); // Initialize the dialog from the current paragraph's settings m_paragDlg->setParagLayout( * lst.first()->currentParagLayoutFormat() ); // Set initial page and initial tabpos if necessary if ( initialPage != -1 ) { m_paragDlg->setCurrentPage( initialPage ); if ( initialPage == KoParagDia::PD_TABS ) m_paragDlg->tabulatorsWidget()->setCurrentTab( initialTabPos ); } connect( m_paragDlg, TQT_SIGNAL( applyParagStyle() ), TQT_TQOBJECT(this), TQT_SLOT( slotApplyParag() ) ); m_paragDlg->exec(); delete m_paragDlg; m_paragDlg = 0; } void KPrView::slotApplyParag() { TQPtrList lst = m_canvas->applicableTextInterfaces(); Q_ASSERT( !lst.isEmpty() ); if ( lst.isEmpty() ) return; TQPtrListIterator it( lst ); KMacroCommand * macroCommand = new KMacroCommand( i18n( "Paragraph Settings" ) ); KoParagLayout newLayout = m_paragDlg->paragLayout(); int flags = m_paragDlg->changedFlags(); kdDebug() << k_funcinfo << "flags=" << flags << endl; if ( !flags ) return; for ( ; it.current() ; ++it ) { KCommand* cmd = it.current()->setParagLayoutFormatCommand( &newLayout, flags ); Q_ASSERT( cmd ); if(cmd) { macroCommand->addCommand(cmd); } } if(flags) m_pKPresenterDoc->addCommand(macroCommand); else delete macroCommand; // Set "oldLayout" in KoParagDia from the current paragraph's settings // Otherwise "isBlahChanged" will return wrong things when doing A -> B -> A m_paragDlg->setParagLayout( *lst.first()->currentParagLayoutFormat() ); } void KPrView::textDefaultFormat() { m_canvas->setTextDefaultFormat( ); } void KPrView::changeNbOfRecentFiles(int _nb) { if ( shell() ) // 0 when embedded into konq ! shell()->setMaxRecentItems( _nb ); } TQPopupMenu * KPrView::popupMenu( const TQString& name ) { Q_ASSERT(factory()); if ( factory() ) return ((TQPopupMenu*)factory()->container( name, this )); return 0L; } void KPrView::addVariableActions( int type, const TQStringList & texts, KActionMenu * parentMenu, const TQString & menuText ) { // Single items go directly into parentMenu. // For multiple items we create a submenu. if ( texts.count() > 1 && !menuText.isEmpty() ) { KActionMenu * subMenu = new KActionMenu( menuText, actionCollection() ); parentMenu->insert( subMenu ); parentMenu = subMenu; } TQStringList::ConstIterator it = texts.begin(); for ( int i = 0; it != texts.end() ; ++it, ++i ) { if ( !(*it).isEmpty() ) // in case of removed subtypes or placeholders { VariableDef v; v.type = type; v.subtype = i; KAction * act = new KAction( (*it), 0, TQT_TQOBJECT(this), TQT_SLOT( insertVariable() ), actionCollection(), "var-action" ); m_variableDefMap.insert( act, v ); parentMenu->insert( act ); } } } void KPrView::refreshCustomMenu() { KActionPtrList lst2 = actionCollection()->actions("custom-variable-action"); TQValueList actions = lst2; TQValueList::ConstIterator it2 = lst2.begin(); TQValueList::ConstIterator end = lst2.end(); TQMap shortCuts; for (; it2 != end; ++it2 ) { shortCuts.insert((*it2)->text(), (*it2)->shortcut()); delete *it2; } delete actionInsertCustom; actionInsertCustom = new KActionMenu( i18n( "&Custom" ), actionCollection(), "insert_custom" ); actionInsertVariable->insert(actionInsertCustom, 0); actionInsertCustom->popupMenu()->clear(); TQPtrListIterator it( m_pKPresenterDoc->getVariableCollection()->getVariables() ); KAction * act=0; TQStringList lst; TQString varName; int i = 0; for ( ; it.current() ; ++it ) { KoVariable *var = it.current(); if ( var->type() == VT_CUSTOM ) { varName=( (KoCustomVariable*) var )->name(); if ( !lst.tqcontains( varName) ) { lst.append( varName ); TQCString name = TQString("custom-action_%1").tqarg(i).latin1(); act = new KAction( varName, shortCuts[varName], TQT_TQOBJECT(this), TQT_SLOT( insertCustomVariable() ), actionCollection(), name ); act->setGroup( "custom-variable-action" ); actionInsertCustom->insert( act ); i++; } } } bool state=!lst.isEmpty(); if(state) actionInsertCustom->popupMenu()->insertSeparator(); act = new KAction( i18n("New..."), 0, TQT_TQOBJECT(this), TQT_SLOT( insertNewCustomVariable() ), actionCollection(), TQString("custom-action_%1").tqarg(i).latin1() ); act->setGroup( "custom-variable-action" ); actionInsertCustom->insert( act ); actionInsertCustom->popupMenu()->insertSeparator(); actionEditCustomVars->setEnabled(state); actionEditCustomVarsEdit->setEnabled( state ); actionInsertCustom->insert( actionEditCustomVarsEdit ); } void KPrView::insertCustomVariable() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KAction * act = (KAction *)(TQT_TQOBJECT(const_cast(sender()))); edit->insertCustomVariable(act->text()); } } void KPrView::insertNewCustomVariable() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->insertVariable( VT_CUSTOM, 0 ); } void KPrView::editCustomVariable() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KoCustomVariable *var = static_cast(edit->variable()); if (var) { TQString oldvalue = var->value(); KoCustomVarDialog dia( this, var ); if ( dia.exec() ) { if( var->value() != oldvalue ) { KPrChangeCustomVariableValue *cmd=new KPrChangeCustomVariableValue(i18n( "Change Custom Variable" ), m_pKPresenterDoc, oldvalue, var->value(), var ); m_pKPresenterDoc->addCommand(cmd); } m_pKPresenterDoc->recalcVariables( VT_CUSTOM ); } } } } void KPrView::editCustomVars() { KoCustomVariablesDia dia( this, m_pKPresenterDoc->getVariableCollection()->getVariables() ); TQStringList listOldCustomValue; TQPtrListIterator oldIt( m_pKPresenterDoc->getVariableCollection()->getVariables() ); for ( ; oldIt.current() ; ++oldIt ) { if(oldIt.current()->type()==VT_CUSTOM) listOldCustomValue.append(((KoCustomVariable*)oldIt.current())->value()); } if(dia.exec()) { m_pKPresenterDoc->recalcVariables( VT_CUSTOM ); TQPtrListIterator it( m_pKPresenterDoc->getVariableCollection()->getVariables() ); KMacroCommand * macroCommand = 0L; int i=0; for ( ; it.current() ; ++it ) { if(it.current()->type() == VT_CUSTOM ) { if(((KoCustomVariable*)it.current())->value()!=*(listOldCustomValue.at(i))) { if(!macroCommand) macroCommand = new KMacroCommand( i18n( "Change Custom Variable" ) ); KPrChangeCustomVariableValue *cmd= new KPrChangeCustomVariableValue(i18n( "Change Custom Variable" ), m_pKPresenterDoc, *(listOldCustomValue.at(i)), ((KoCustomVariable*)it.current())->value(), ((KoCustomVariable*)it.current())); macroCommand->addCommand(cmd); } i++; } } if(macroCommand) m_pKPresenterDoc->addCommand(macroCommand); } } void KPrView::insertVariable() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KAction * act = (KAction *)(TQT_TQOBJECT(const_cast(sender()))); VariableDefMap::ConstIterator it = m_variableDefMap.tqfind( act ); if ( it == m_variableDefMap.end() ) kdWarning(33001) << "Action not found in m_variableDefMap." << endl; else { if ( (*it).type == VT_FIELD ) edit->insertVariable( (*it).type, KoFieldVariable::fieldSubType( (*it).subtype ) ); else edit->insertVariable( (*it).type, (*it).subtype ); } } } void KPrView::openLink() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->openLink(); } void KPrView::showRulerIndent( double _leftMargin, double _firstLine, double _rightMargin, bool rtl ) { KoRuler * hRuler = getHRuler(); if ( hRuler ) { hRuler->setFirstIndent( KoUnit::toUserValue( _firstLine, m_pKPresenterDoc->unit() ) ); hRuler->setLeftIndent( KoUnit::toUserValue( _leftMargin, m_pKPresenterDoc->unit() ) ); hRuler->setRightIndent( KoUnit::toUserValue( _rightMargin, m_pKPresenterDoc->unit() ) ); hRuler->setDirection( rtl ); actionTextDepthMinus->setEnabled( _leftMargin>0); } } void KPrView::tabListChanged( const KoTabulatorList & tabList ) { if(!m_pKPresenterDoc->isReadWrite()) return; m_canvas->setTabList( tabList ); } void KPrView::newFirstIndent( double _firstIndent ) { m_canvas->setNewFirstIndent(_firstIndent); } void KPrView::newLeftIndent( double _leftIndent) { m_canvas->setNewLeftIndent(_leftIndent); } void KPrView::newRightIndent( double _rightIndent) { m_canvas->setNewRightIndent(_rightIndent); } void KPrView::slotUpdateRuler() { // Set the "frame start" in the ruler (tabs are relative to that position) bool isText=!m_canvas->applicableTextObjects().isEmpty(); if ( isText ) { KPrTextObject *txtobj= m_canvas->applicableTextObjects().first(); if ( txtobj ) { TQRect r= zoomHandler()->zoomRect(txtobj->getRealRect()); getHRuler()->setFrameStartEnd( r.left() /*+ m_canvas->diffx()*//*- pc.x()*/, r.right()/*+m_canvas->diffx()*/ /*- pc.x()*/ ); getVRuler()->setFrameStartEnd( r.top()/*+ m_canvas->diffy()*//*- pc.y()*/, r.bottom()/*+m_canvas->diffy()*//*- pc.y()*/ ); if( getHRuler()) { int flags = txtobj->isProtectContent() ? 0 : (KoRuler::F_INDENTS | KoRuler::F_TABS); if( getHRuler()->flags()!= flags ) { getHRuler()->changeFlags(flags); getHRuler()->tqrepaint(); } } if( getVRuler()) { if( getVRuler()->flags() != 0 ) { getVRuler()->changeFlags(0); getVRuler()->tqrepaint(); } } } } else { refreshRuler( kPresenterDoc()->showGuideLines() ); updateRuler(); } } // This handles Tabulators _only_ void KPrView::slotHRulerDoubleClicked( double ptpos ) { showParagraphDialog( KoParagDia::PD_TABS, ptpos ); } // This handles either: // - Indents // - Page Layout // // This does _not_ handle Tabulators! void KPrView::slotHRulerDoubleClicked() { KoRuler *ruler = getHRuler(); if ( m_canvas && m_canvas->currentTextObjectView() && (ruler->flags() & KoRuler::F_INDENTS) && ruler->doubleClickedIndent() ) formatParagraph(); else openPageLayoutDia(); } void KPrView::changeCaseOfText() { TQPtrList lst = m_canvas->applicableTextInterfaces(); if ( lst.isEmpty() ) return; TQPtrListIterator it( lst ); KoChangeCaseDia *caseDia=new KoChangeCaseDia( this,"change case" ); if(caseDia->exec()) { KMacroCommand* macroCmd = 0L; for ( ; it.current() ; ++it ) { KCommand *cmd = it.current()->setChangeCaseOfTextCommand(caseDia->getTypeOfCase()); if (cmd) { if ( !macroCmd ) macroCmd = new KMacroCommand( i18n("Change Case of Text") ); macroCmd->addCommand(cmd); } } if( macroCmd ) m_pKPresenterDoc->addCommand(macroCmd); } delete caseDia; } void KPrView::editFind() { if (!m_searchEntry) m_searchEntry = new KoSearchContext(); KPrTextView * edit = m_canvas->currentTextObjectView(); bool hasSelection = edit && (edit->kpTextObject())->textObject()->hasSelection(); bool hasCursor = edit != 0; KoSearchDia dialog( m_canvas, "tqfind", m_searchEntry, hasSelection, hasCursor ); /// KoFindReplace needs a TQValueList... TQValueList list; TQPtrList list2 = m_pKPresenterDoc->allTextObjects(); TQPtrListIterator it( list2 ); for ( ; it.current() ; ++it ) list.append(it.current()); if( list.isEmpty() ) return; if ( dialog.exec() == TQDialog::Accepted ) { delete m_findReplace; m_findReplace = new KPrFindReplace( this, m_canvas, &dialog, list, edit ); editFindNext(); } } void KPrView::editReplace() { if (!m_searchEntry) m_searchEntry = new KoSearchContext(); if (!m_replaceEntry) m_replaceEntry = new KoSearchContext(); KPrTextView * edit = m_canvas->currentTextObjectView(); bool hasSelection = edit && (edit->kpTextObject())->textObject()->hasSelection(); bool hasCursor = edit != 0; KoReplaceDia dialog( m_canvas, "tqreplace", m_searchEntry, m_replaceEntry, hasSelection, hasCursor ); /// KoFindReplace needs a TQValueList... TQValueList list; TQPtrList list2 = m_pKPresenterDoc->allTextObjects(); TQPtrListIterator it( list2 ); for ( ; it.current() ; ++it ) list.append(it.current()); if( list.isEmpty() ) return; if ( dialog.exec() == TQDialog::Accepted ) { delete m_findReplace; m_findReplace = new KPrFindReplace( this, m_canvas, &dialog, list, edit ); editFindNext(); } } void KPrView::editFindPrevious() { if ( !m_findReplace ) // shouldn't be called before find or replace is activated { editFind(); return; } (void) m_findReplace->findPrevious(); } void KPrView::editFindNext() { if ( !m_findReplace ) // shouldn't be called before find or replace is activated { editFind(); return; } (void) m_findReplace->findNext(); } void KPrView::refreshAllVariable() { m_pKPresenterDoc->recalcVariables( VT_ALL ); } void KPrView::changeZoomMenu( int zoom ) { TQStringList lst; lst << i18n( "Width" ); lst << i18n( "Whole Slide" ); if(zoom>0) { TQValueList list; bool ok; const TQStringList itemsList ( actionViewZoom->items() ); TQRegExp regexp("(\\d+)"); // "Captured" non-empty sequence of digits for (TQStringList::ConstIterator it = itemsList.begin() ; it != itemsList.end() ; ++it) { regexp.search(*it); const int val=regexp.cap(1).toInt(&ok); //zoom : limit inferior=10 if(ok && val>9 && list.tqcontains(val)==0) list.append( val ); } //necessary at the beginning when we read config //this value is not in combo list if(list.tqcontains(zoom)==0) list.append( zoom ); qHeapSort( list ); for (TQValueList::Iterator it = list.begin() ; it != list.end() ; ++it) lst.append( i18n("%1%").tqarg(*it) ); } else { lst << i18n("%1%").tqarg("33"); lst << i18n("%1%").tqarg("50"); lst << i18n("%1%").tqarg("75"); lst << i18n("%1%").tqarg("100"); lst << i18n("%1%").tqarg("125"); lst << i18n("%1%").tqarg("150"); lst << i18n("%1%").tqarg("200"); lst << i18n("%1%").tqarg("250"); lst << i18n("%1%").tqarg("350"); lst << i18n("%1%").tqarg("400"); lst << i18n("%1%").tqarg("450"); lst << i18n("%1%").tqarg("500"); } actionViewZoom->setItems( lst ); } void KPrView::showZoom( int zoom ) { TQStringList list = actionViewZoom->items(); TQString zoomStr( i18n("%1%").tqarg( zoom ) ); int pos = list.tqfindIndex(zoomStr); if( pos == -1) { changeZoomMenu( zoom ); list = actionViewZoom->items(); } actionViewZoom->setCurrentItem( list.tqfindIndex(zoomStr) ); } void KPrView::viewZoom( const TQString &s ) { bool ok=false; int zoom = 0; if ( s == i18n("Width") ) { zoom = tqRound( static_cast(m_canvas->visibleRect().width() * 100 ) / (zoomHandler()->resolutionX() * m_pKPresenterDoc->pageLayout().ptWidth ) ); ok = true; } else if ( s == i18n("Whole Slide") ) { zoom = getZoomEntirePage(); ok = true; } else { TQRegExp regexp("(\\d+)"); // "Captured" non-empty sequence of digits regexp.search(s); zoom=regexp.cap(1).toInt(&ok); } if( !ok || zoom<10 ) //zoom should be valid and >10 zoom = zoomHandler()->zoom(); zoom = TQMIN( zoom, 4000); //refresh menu changeZoomMenu( zoom ); //refresh menu item showZoom(zoom); //apply zoom if zoom!=m_doc->zoom() if( zoom != zoomHandler()->zoom() ) { setZoom( zoom, true ); KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->ensureCursorVisible(); } m_canvas->setFocus(); m_canvas->tqrepaint(); } void KPrView::setZoomRect( const KoRect & rect ) { double height = zoomHandler()->resolutionY() * rect.height(); double width = zoomHandler()->resolutionX() * rect.width(); int zoom = TQMIN( tqRound( static_cast( m_canvas->visibleRect().height() * 100 ) / height ), tqRound( static_cast( m_canvas->visibleRect().width() * 100 ) / width ) ); m_canvas->setUpdatesEnabled( false ); viewZoom( TQString::number( zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->scrollTopLeftPoint( zoomHandler()->zoomPoint( rect.topLeft() ) ); m_canvas->setUpdatesEnabled( true ); m_canvas->tqrepaint(); } void KPrView::setZoom( int zoom, bool updateViews ) { zoomHandler()->setZoomAndResolution( zoom, KoGlobal::dpiX(), KoGlobal::dpiY()); m_pKPresenterDoc->newZoomAndResolution(updateViews,false); m_pKPresenterDoc->updateZoomRuler(); setRanges(); if ( statusBar() ) m_sbZoomLabel->setText( ' ' + TQString::number( zoom ) + "% " ); } void KPrView::slotUpdateScrollBarRanges() { setRanges(); } KoTextZoomHandler *KPrView::zoomHandler() const { return m_pKPresenterDoc->zoomHandler(); } void KPrView::slotViewFormattingChars() { m_pKPresenterDoc->setViewFormattingChars(actionViewFormattingChars->isChecked()); m_pKPresenterDoc->tqlayout(); // Due to the different formatting when this option is activated m_pKPresenterDoc->tqrepaint(false); } void KPrView::setPageDuration( int _pgNum ) { if ( kPresenterDoc()->presentationDuration() ) { // kdDebug(33001) << "KPrView::setPageDuration( " << _pgNum << " )" << endl; *m_presentationDurationList.at( _pgNum ) += m_duration.elapsed(); m_duration.restart(); } } void KPrView::openThePresentationDurationDialog() { int totalTime = 0; TQStringList presentationDurationStringList; for ( TQValueList::Iterator it = m_presentationDurationList.begin(); it != m_presentationDurationList.end(); ++it ) { int _time = *it; TQString presentationDurationString = presentationDurationDataFormatChange( _time ); presentationDurationStringList.append( presentationDurationString ); totalTime += _time; } TQString presentationTotalDurationString = presentationDurationDataFormatChange( totalTime ); delete presDurationDia; presDurationDia = 0; presDurationDia = new KPrPresDurationDia( this, "presDurationDia", kPresenterDoc(), presentationDurationStringList, presentationTotalDurationString ); presDurationDia->setCaption( i18n( "Presentation Duration" ) ); TQObject::connect( presDurationDia, TQT_SIGNAL( presDurationDiaClosed() ), TQT_TQOBJECT(this), TQT_SLOT( pddClosed() ) ); presDurationDia->exec(); delete presDurationDia; presDurationDia = 0; } void KPrView::pddClosed() { presDurationDia = 0; } // change from milliseconds to hh:mm:ss // in kdelibs 3.2.90, an additional method was added that basically // allows formatting of time as a duration. Before this, you can get // weirdness (such as a duration of 12:00:03 am) depending on how the // time format is set. TQString KPrView::presentationDurationDataFormatChange( int _time ) { TQTime time( 0, 0, 0 ); return KGlobal::locale()->formatTime( time.addMSecs( _time ), true, true ); } void KPrView::viewFooter() { bool state = m_actionExtraFooter->isChecked(); m_canvas->activePage()->setFooter( state ); KPrHideShowHeaderFooter * cmd =new KPrHideShowHeaderFooter( state ? i18n("Enable Document Header") : i18n("Disable Document Header"), m_pKPresenterDoc, m_canvas->activePage(), state, m_pKPresenterDoc->footer()); m_pKPresenterDoc->addCommand(cmd); m_pKPresenterDoc->updateSideBarItem( m_pKPresenterDoc->masterPage() ); } void KPrView::viewHeader() { bool state = m_actionExtraHeader->isChecked(); m_canvas->activePage()->setHeader( state ); KPrHideShowHeaderFooter * cmd =new KPrHideShowHeaderFooter( state ? i18n("Enable Document Footer") : i18n("Disable Document Footer"), m_pKPresenterDoc, m_canvas->activePage(), state, m_pKPresenterDoc->header()); m_pKPresenterDoc->addCommand(cmd); m_pKPresenterDoc->updateSideBarItem( m_pKPresenterDoc->masterPage() ); } void KPrView::showStyle( const TQString & styleName ) { KoParagStyle* style = m_pKPresenterDoc->styleCollection()->findStyle( styleName ); if ( style ) { int pos = m_pKPresenterDoc->styleCollection()->indexOf( style ); // Select style in combo actionFormatStyle->setCurrentItem( pos ); } } void KPrView::updateStyleList() { TQString currentStyle = actionFormatStyle->currentText(); // Generate list of styles const TQStringList lst = m_pKPresenterDoc->styleCollection()->displayNameList(); const int pos = lst.tqfindIndex( currentStyle ); // Fill the combo - using a KSelectAction actionFormatStyle->setItems( lst ); if ( pos > -1 ) actionFormatStyle->setCurrentItem( pos ); // Fill the menu - using a KActionMenu, so that it's possible to bind keys // to individual actions TQStringList lstWithAccels; // Generate unique accelerators for the menu items KAccelGen::generate( lst, lstWithAccels ); TQMap shortCuts; KActionPtrList lst2 = actionCollection()->actions("styleList"); TQValueList actions = lst2; TQValueList::ConstIterator it = lst2.begin(); TQValueList::ConstIterator end = lst2.end(); for (; it != end; ++it ) { shortCuts.insert( TQString::fromUtf8( (*it)->name() ), (*it)->shortcut() ); actionFormatStyleMenu->remove( *it ); delete *it; } uint i = 0; for ( TQStringList::Iterator it = lstWithAccels.begin(); it != lstWithAccels.end(); ++it, ++i ) { KoParagStyle *style = m_pKPresenterDoc->styleCollection()->styleAt( i ); if ( style ) { TQString name = "paragstyle_" + style->name(); KToggleAction* act = new KToggleAction( (*it), shortCuts[name], TQT_TQOBJECT(this), TQT_SLOT( slotStyleSelected() ), actionCollection(), name.utf8() ); act->setGroup( "styleList" ); act->setExclusiveGroup( "styleListAction" ); act->setToolTip( i18n( "Apply a paragraph style" ) ); actionFormatStyleMenu->insert( act ); } } bool isText=!m_canvas->applicableTextInterfaces().isEmpty(); actionFormatStyleMenu->setEnabled( isText ); actionFormatStyle->setEnabled(isText); } void KPrView::extraStylist() { KPrTextView *edit=m_canvas->currentTextObjectView(); TQString activeStyleName = TQString(); if ( edit ) { edit->hideCursor(); if (edit->cursor() && edit->cursor()->parag() && edit->cursor()->parag()->style()) activeStyleName = edit->cursor()->parag()->style()->displayName(); } KPrStyleManager * styleManager = new KPrStyleManager( this, m_pKPresenterDoc->unit(), m_pKPresenterDoc, *m_pKPresenterDoc->styleCollection(), activeStyleName); styleManager->exec(); delete styleManager; if ( edit ) edit->showCursor(); } // Called when selecting a style in the Format / Style menu void KPrView::slotStyleSelected() { TQString actionName = TQString::fromUtf8(TQT_TQOBJECT(const_cast(sender()))->name()); kdDebug(33001) << "KPrView::slotStyleSelected " << actionName << endl; textStyleSelected( m_pKPresenterDoc->styleCollection()->findStyle( actionName ) ); } void KPrView::textStyleSelected( int index ) { textStyleSelected( m_pKPresenterDoc->styleCollection()->styleAt( index ) ); } void KPrView::textStyleSelected( KoParagStyle *_sty ) { if ( !_sty ) return; KPrTextView *edit=m_canvas->currentTextObjectView(); if(edit) { edit->applyStyle( _sty ); m_canvas->setFocus(); } else { TQPtrList selectedFrames = m_canvas->selectedTextObjs(); if (selectedFrames.count() <= 0) return; // nope, no frames are selected. // yes, indeed frames are selected. TQPtrListIterator it( selectedFrames ); KMacroCommand *globalCmd = 0L; for ( ; it.current() ; ++it ) { KoTextObject *textObject = it.current()->textObject(); textObject->textDocument()->selectAll( KoTextDocument::Temp ); KCommand *cmd = textObject->applyStyleCommand( 0L, _sty, KoTextDocument::Temp, KoParagLayout::All, KoTextFormat::Format, true, true ); textObject->textDocument()->removeSelection( KoTextDocument::Temp ); if (cmd) { if ( !globalCmd) globalCmd = new KMacroCommand( selectedFrames.count() == 1 ? i18n("Apply Style to Frame") : i18n("Apply Style to Frames")); globalCmd->addCommand( cmd ); } } if ( globalCmd ) m_pKPresenterDoc->addCommand( globalCmd ); } } void KPrView::slotAllowAutoFormat() { bool state = actionAllowAutoFormat->isChecked(); m_pKPresenterDoc->setAllowAutoFormat( state ); } void KPrView::slotCompletion() { KPrTextView *edit=m_canvas->currentTextObjectView(); if(edit) edit->completion(); } void KPrView::insertComment() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( !edit ) return; TQString authorName; KoDocumentInfo * info = m_pKPresenterDoc->documentInfo(); KoDocumentInfoAuthor * authorPage = static_cast(info->page( "author" )); if ( !authorPage ) kdWarning() << "Author information not found in documentInfo !" << endl; else authorName = authorPage->fullName(); KoCommentDia *commentDia = new KoCommentDia( this, TQString(),authorName ); if( commentDia->exec() ) edit->insertComment(commentDia->commentText()); delete commentDia; } void KPrView::editComment() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KoVariable * tmpVar=edit->variable(); KoNoteVariable * var = dynamic_cast(tmpVar); if(var) { TQString authorName; KoDocumentInfo * info = m_pKPresenterDoc->documentInfo(); KoDocumentInfoAuthor * authorPage = static_cast(info->page( "author" )); if ( !authorPage ) kdWarning() << "Author information not found in documentInfo !" << endl; else authorName = authorPage->fullName(); TQString oldValue = var->note(); TQString createDate = var->createdNote(); KoCommentDia *commentDia = new KoCommentDia( this, oldValue, authorName, createDate); if( commentDia->exec() ) { if ( oldValue != commentDia->commentText()) { KPrChangeVariableNoteText *cmd = new KPrChangeVariableNoteText( i18n("Change Note Text"), m_pKPresenterDoc, oldValue,commentDia->commentText(), var); m_pKPresenterDoc->addCommand( cmd ); cmd->execute(); } } delete commentDia; } } } void KPrView::viewGuideLines() { bool state=actionViewShowGuideLine->isChecked(); m_pKPresenterDoc->setShowGuideLines( state ); m_pKPresenterDoc->updateGuideLineButton(); deSelectAllObjects(); refreshRuler( state ); m_pKPresenterDoc->tqrepaint(false); } void KPrView::viewGrid() { m_pKPresenterDoc->setShowGrid( actionViewShowGrid->isChecked() ); m_pKPresenterDoc->setModified( true ); m_pKPresenterDoc->updateGridButton(); m_pKPresenterDoc->tqrepaint(false); } void KPrView::updateGuideLineButton() { bool state = m_pKPresenterDoc->showGuideLines(); actionViewShowGuideLine->setChecked( state ); refreshRuler( state ); } void KPrView::updateGridButton() { actionViewShowGrid->setChecked( m_pKPresenterDoc->showGrid() ); actionViewSnapToGrid->setChecked ( m_pKPresenterDoc->snapToGrid() ); } void KPrView::refreshRuler( bool state ) { if( getHRuler() ) { if ( !m_pKPresenterDoc->isReadWrite()) { getHRuler()->changeFlags(KoRuler::F_NORESIZE); getHRuler()->tqrepaint(); } else { if( state ) { if( getHRuler()->flags() != KoRuler::F_HELPLINES ) { getHRuler()->changeFlags(KoRuler::F_HELPLINES); getHRuler()->tqrepaint(); } } else { if( getHRuler()->flags() != 0 ) { getHRuler()->changeFlags( 0 ); getHRuler()->tqrepaint(); } } } } if( getVRuler()) { if ( !m_pKPresenterDoc->isReadWrite()) { getVRuler()->changeFlags(KoRuler::F_NORESIZE); getVRuler()->tqrepaint(); } else { if( state ) { if( getVRuler()->flags() != KoRuler::F_HELPLINES ) { getVRuler()->changeFlags(KoRuler::F_HELPLINES); getVRuler()->tqrepaint(); } } else { if( getVRuler()->flags()!= 0) { getVRuler()->changeFlags(0); getVRuler()->tqrepaint(); } } } } } void KPrView::addGuideLine() { KoRect rect( m_canvas->activePage()->getPageRect() ); KoPoint pos( zoomHandler()->unzoomPoint( m_mousePos + TQPoint( m_canvas->diffx(), m_canvas->diffy() ) ) ); KoGuideLineDia dia( 0, pos, rect, m_pKPresenterDoc->unit() ); if ( dia.exec() == TQDialog::Accepted ) { m_pKPresenterDoc->addGuideLine( dia.orientation(), dia.pos() ); } } void KPrView::removeComment() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->removeComment(); } void KPrView::configureCompletion() { m_pKPresenterDoc->getAutoFormat()->readConfig(); KoCompletionDia dia( this, 0, m_pKPresenterDoc->getAutoFormat() ); dia.exec(); } void KPrView::openPopupMenuZoom( const TQPoint & _point ) { if(!koDocument()->isReadWrite() || !factory()) return; actionZoomSelectedObject->setEnabled( m_canvas->isOneObjectSelected()); int nbObj = m_canvas->activePage()->objectList().count(); actionZoomAllObject->setEnabled( nbObj > 0); static_cast(factory()->container("zoom_popup",this))->popup(_point); } void KPrView::zoomMinus() { //unzoom from 25% int zoom = zoomHandler()->zoom() - (int)(zoomHandler()->zoom()*0.25); viewZoom( TQString::number(zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } void KPrView::zoomPageWidth() { int zoom = tqRound( static_cast(m_canvas->visibleRect().width() * 100 ) / (zoomHandler()->resolutionX() * m_pKPresenterDoc->pageLayout().ptWidth ) ); viewZoom( TQString::number(zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } void KPrView::zoomEntirePage() { viewZoom( TQString::number(getZoomEntirePage() ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } void KPrView::zoomPlus() { int zoom = zoomHandler()->zoom() + int( zoomHandler()->zoom() * 0.25 ); viewZoom( TQString::number( zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } int KPrView::getZoomEntirePage() const { double height = zoomHandler()->resolutionY() * m_pKPresenterDoc->pageLayout().ptHeight; double width = zoomHandler()->resolutionX() * m_pKPresenterDoc->pageLayout().ptWidth; int zoom = TQMIN( tqRound( static_cast(m_canvas->visibleRect().height() * 100 ) / height ), tqRound( static_cast(m_canvas->visibleRect().width() * 100 ) / width ) ); return zoom; } void KPrView::zoomSelectedObject() { if( m_canvas->isOneObjectSelected() ) { KoRect rect = m_canvas->objectRect( false ); setZoomRect( rect ); } } void KPrView::zoomPageHeight() { int zoom = tqRound( static_cast(m_canvas->visibleRect().height() * 100 ) / (zoomHandler()->resolutionX() * m_pKPresenterDoc->pageLayout().ptHeight ) ); viewZoom( TQString::number(zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); } void KPrView::zoomAllObject() { KoRect rect = m_canvas->objectRect( true ); double height = zoomHandler()->resolutionY() * rect.height(); double width = zoomHandler()->resolutionX() * rect.width(); int zoom = TQMIN( tqRound( static_cast(m_canvas->visibleRect().height() * 100 ) / height ), tqRound( static_cast(m_canvas->visibleRect().width() * 100 ) / width ) ); viewZoom( TQString::number(zoom ) ); m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->scrollTopLeftPoint( zoomHandler()->zoomPoint( rect.topLeft()) ); } void KPrView::flipHorizontal() { m_canvas->flipObject( true ); } void KPrView::flipVertical() { m_canvas->flipObject( false ); } void KPrView::slotObjectEditChanged() { bool state=m_canvas->isOneObjectSelected(); bool rw = koDocument()->isReadWrite(); bool isText=!m_canvas->applicableTextInterfaces().isEmpty(); actionTextFont->setEnabled(isText); actionTextFontSize->setEnabled(isText); actionTextFontFamily->setEnabled(isText); actionTextColor->setEnabled(isText); actionTextAlignLeft->setEnabled(isText); actionTextAlignCenter->setEnabled(isText); actionTextAlignRight->setEnabled(isText); actionTextAlignBlock->setEnabled(isText); actionFormatBullet->setEnabled(rw && isText ); actionFormatNumber->setEnabled(rw && isText ); actionTextDepthPlus->setEnabled(isText); actionFormatDefault->setEnabled(isText); actionTextDepthMinus->setEnabled(isText); actionTextExtentCont2Height->setEnabled(isText); actionTextExtendObj2Cont->setEnabled(isText); actionTextBold->setEnabled(isText); actionTextItalic->setEnabled(isText); actionTextUnderline->setEnabled(isText); actionFormatStrikeOut->setEnabled(isText); actionFormatSuper->setEnabled(isText); actionFormatSub->setEnabled(isText); actionIncreaseFontSize->setEnabled(isText); actionDecreaseFontSize->setEnabled(isText); if ( isText ) { KoTextFormat format =*(m_canvas->applicableTextInterfaces().first()->currentFormat()); showFormat( format ); const KoParagLayout * paragLayout=m_canvas->applicableTextInterfaces().first()->currentParagLayoutFormat(); KoParagCounter counter; if(paragLayout->counter) counter = *(paragLayout->counter); int align = paragLayout->tqalignment; if ( align == TQt::AlignAuto ) align = TQt::AlignLeft; // ## seems hard to detect RTL here alignChanged( align ); } KPrTextView *edit=m_canvas->currentTextObjectView(); bool val=(edit!=0) && isText && !edit->kpTextObject()->isProtectContent(); actionInsertSpecialChar->setEnabled(val); actionInsertComment->setEnabled( val ); actionInsertLink->setEnabled(val); actionFormatParag->setEnabled(isText); actionInsertVariable->setEnabled(val); actionTextInsertPageNum->setEnabled(val); if ( edit ) actionBrushColor->setEnabled(val); bool hasSelection = false ; if(edit) { double leftMargin =edit->currentParagLayout().margins[TQStyleSheetItem::MarginLeft]; actionTextDepthMinus->setEnabled(val && leftMargin>0); hasSelection = edit->textObject()->hasSelection(); actionEditCut->setEnabled(hasSelection); } actionCreateStyleFromSelection->setEnabled(edit!=0); actionChangeCase->setEnabled( (val && rw && hasSelection ) || (rw && !edit && isText) ); if(!edit) { actionEditCopy->setEnabled(state); bool headerfooterselected = false; if(m_canvas->numberOfObjectSelected()==1) { KPrObject *obj=m_canvas->getSelectedObj(); //disable this action when we select a header/footer if(obj==m_pKPresenterDoc->header() || obj==m_pKPresenterDoc->footer()) headerfooterselected=true; else headerfooterselected=false; } actionEditCut->setEnabled(state&&!headerfooterselected); } actionFormatStyleMenu->setEnabled( isText ); actionFormatStyle->setEnabled(isText); state=m_canvas->oneObjectTextExist(); actionEditFind->setEnabled(state); actionEditFindNext->setEnabled( state ); actionEditFindPrevious->setEnabled( state ); actionEditReplace->setEnabled(state); slotUpdateRuler(); } void KPrView::duplicateObj() { if (m_canvas->currentTextObjectView() && !m_canvas->isOneObjectSelected() ) return; KPrDuplicatObjDia *dlg= new KPrDuplicatObjDia(this, m_pKPresenterDoc); if ( dlg->exec() ) { int nbCopy= dlg->nbCopy(); double angle = dlg->angle(); double increaseX = dlg->increaseX(); double increaseY = dlg->increaseY(); double moveX = dlg->moveX(); double moveY = dlg->moveY(); m_canvas->copyObjs(); m_canvas->setToolEditMode( TEM_MOUSE ); deSelectAllObjects(); TQMimeSource *data = TQApplication::tqclipboard()->data(); TQCString clip_str = KoStoreDrag::mimeType("application/x-kpresenter"); if ( data->provides( clip_str ) ) { m_canvas->activePage()->pasteObjs( data->tqencodedData(clip_str), nbCopy, angle, increaseX,increaseY, moveX, moveY ); m_canvas->setMouseSelectedObject(true); emit objectSelectedChanged(); } } delete dlg; } void KPrView::extraArrangePopup() { m_canvas->setToolEditMode( TEM_MOUSE ); TQPoint pnt( TQCursor::pos() ); m_arrangeObjectsPopup->popup( pnt ); } void KPrView::extraSendBackward() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->lowerObjs( false ); } void KPrView::extraBringForward() { m_canvas->setToolEditMode( TEM_MOUSE ); m_canvas->raiseObjs( false ); } void KPrView::applyAutoFormat() { m_pKPresenterDoc->getAutoFormat()->readConfig(); KMacroCommand *macro = 0L; m_switchPage=m_pKPresenterDoc->pageList().tqfindRef(m_canvas->activePage()); m_initSwitchPage=m_switchPage; TQPtrList list=m_canvas->activePage()->allTextObjects(); KCommand * cmd2 = applyAutoFormatToCurrentPage( list ); if ( cmd2 ) { if ( !macro ) macro = new KMacroCommand( i18n("Apply Autoformat")); macro->addCommand( cmd2 ); } while(switchInOtherPage(i18n( "Do you want to apply autoformat in new slide?")) ) { KCommand * cmd = applyAutoFormatToCurrentPage(m_canvas->activePage()->allTextObjects()); if ( cmd ) { if ( !macro ) macro = new KMacroCommand( i18n("Apply Autoformat")); macro->addCommand( cmd ); } } if ( macro ) m_pKPresenterDoc->addCommand(macro); m_switchPage=-1; m_initSwitchPage=-1; } bool KPrView::switchInOtherPage( const TQString & text ) { //there is not other page if(m_pKPresenterDoc->pageList().count()==1) return false; m_switchPage++; if( m_switchPage>=(int)m_pKPresenterDoc->pageList().count()) m_switchPage=0; if( m_switchPage==m_initSwitchPage) return false; if ( KMessageBox::questionYesNo( this, text) != KMessageBox::Yes ) return false; skipToPage(m_switchPage); return true; } KCommand * KPrView::applyAutoFormatToCurrentPage( const TQPtrList & lst) { KMacroCommand *macro = 0L; TQPtrList list(lst); TQPtrListIterator fit(list); for ( ; fit.current() ; ++fit ) { KCommand *cmd = m_pKPresenterDoc->getAutoFormat()->applyAutoFormat( fit.current() ); if ( cmd ) { if ( !macro ) macro = new KMacroCommand( i18n("Apply Autoformat")); macro->addCommand( cmd ); } } return macro; } void KPrView::createStyleFromSelection() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KoStyleCollection* coll = m_pKPresenterDoc->styleCollection(); KoCreateStyleDia *dia = new KoCreateStyleDia( TQStringList(), this, 0 ); if ( dia->exec() ) { TQString name = dia->nameOfNewStyle(); KoParagStyle* style = coll->findStyleByDisplayName( name ); if ( style ) // update existing style { // TODO confirmation message box edit->updateStyleFromSelection( style ); } else // create new style { style = edit->createStyleFromSelection( name ); m_pKPresenterDoc->styleCollection()->addStyle( style ); m_pKPresenterDoc->updateAllStyleLists(); } showStyle( name ); } delete dia; } } void KPrView::closeObject() { m_canvas->closeObject(true); } void KPrView::viewSnapToGrid() { m_pKPresenterDoc->setSnapToGrid( actionViewSnapToGrid->isChecked() ); m_pKPresenterDoc->setModified( true ); m_pKPresenterDoc->updateGridButton(); } void KPrView::alignVerticalTop() { if ( actionAlignVerticalTop->isChecked() ) m_canvas->alignVertical(KP_TOP ); else actionAlignVerticalTop->setChecked(true); } void KPrView::alignVerticalBottom() { if ( actionAlignVerticalBottom->isChecked() ) m_canvas->alignVertical(KP_BOTTOM ); else actionAlignVerticalBottom->setChecked(true); } void KPrView::alignVerticalCenter() { if ( actionAlignVerticalCenter->isChecked() ) m_canvas->alignVertical(KP_CENTER ); else actionAlignVerticalCenter->setChecked(true); } void KPrView::changeVerticalAlignmentStatus( VerticalAlignmentType _type ) { switch( _type ) { case KP_CENTER: actionAlignVerticalCenter->setChecked( true ); break; case KP_TOP: actionAlignVerticalTop->setChecked( true ); break; case KP_BOTTOM: actionAlignVerticalBottom->setChecked( true ); break; } } void KPrView::autoSpellCheck() { m_pKPresenterDoc->changeBgSpellCheckingState( actionAllowBgSpellCheck->isChecked() ); } void KPrView::insertFile( ) { KFileDialog fd( TQString(), TQString(), this, 0, TRUE ); TQStringList filter; filter<<"application/x-kpresenter"; filter<<"application/vnd.oasis.opendocument.presentation"; fd.setMimeFilter( filter ); fd.setCaption(i18n("Insert File")); KURL url; if ( fd.exec() == TQDialog::Accepted ) { url = fd.selectedURL(); if( url.isEmpty() ) { KMessageBox::sorry( this, i18n("File name is empty."), i18n("Insert File")); return; } insertFile(url.path()); } } void KPrView::insertFile(const TQString &path) { m_pKPresenterDoc->insertFile(path); } void KPrView::importStyle() { KPrImportStyleDia dia( m_pKPresenterDoc, m_pKPresenterDoc->styleCollection(), this ); if ( dia.exec() && !dia.importedStyles().isEmpty() ) { m_pKPresenterDoc->styleCollection()->importStyles( dia.importedStyles() ); m_pKPresenterDoc->setModified( true ); m_pKPresenterDoc->updateAllStyleLists(); } } void KPrView::backgroundPicture() { switch( m_canvas->activePage()->getBackType()) { case BT_COLOR: case BT_BRUSH: break; case BT_CLIPART: case BT_PICTURE: KoPicture picture=m_canvas->activePage()->background()->picture(); savePicture(picture.getKey().filename(), picture); break; } } void KPrView::testAndCloseAllTextObjectProtectedContent() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit && edit->kpTextObject()->isProtectContent()) { m_canvas->setToolEditMode( TEM_MOUSE ); deSelectAllObjects(); } } void KPrView::updateBgSpellCheckingState() { actionAllowBgSpellCheck->setChecked( m_pKPresenterDoc->backgroundSpellCheckEnabled() ); } void KPrView::updateRulerInProtectContentMode() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit && getHRuler()) { if ( !edit->kpTextObject()->isProtectContent() ) getHRuler()->changeFlags(KoRuler::F_INDENTS | KoRuler::F_TABS); else getHRuler()->changeFlags(0); getHRuler()->tqrepaint(); } } void KPrView::slotChangeCutState(bool b) { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit && edit->kpTextObject()->isProtectContent()) actionEditCut->setEnabled( false ); else actionEditCut->setEnabled( b ); } void KPrView::updatePresentationButton(bool b) { actionScreenStart->setEnabled( b ); } void KPrView::refreshGroupButton() { bool state=m_canvas->isOneObjectSelected(); actionExtraGroup->setEnabled(state && m_canvas->numberOfObjectSelected()>1); actionExtraUnGroup->setEnabled(state && m_canvas->haveASelectedGroupObj()); } void KPrView::closeTextObject() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit) { m_canvas->setToolEditMode( TEM_MOUSE ); deSelectAllObjects(); } } void KPrView::deSelectAllObjects() { m_canvas->deSelectAllObj(); } void KPrView::copyLink() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->copyLink(); } void KPrView::addToBookmark() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) { KoLinkVariable * var=edit->linkVariable(); if(var) edit->addBookmarks(var->url()); } } void KPrView::removeLink() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->removeLink(); } void KPrView::insertDirectCursor() { #if 0 insertDirectCursor( actionInsertDirectCursor->isChecked()); #endif } void KPrView::insertDirectCursor(bool b) { m_pKPresenterDoc->setInsertDirectCursor(b); } void KPrView::updateDirectCursorButton() { #if 0 actionInsertDirectCursor->setChecked(m_pKPresenterDoc->insertDirectCursor()); #endif } void KPrView::copyTextOfComment() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) edit->copyTextOfComment(); } void KPrView::slotAddIgnoreAllWord() { KPrTextView *edit=m_canvas->currentTextObjectView(); if ( edit ) m_pKPresenterDoc->addSpellCheckIgnoreWord( edit->currentWordOrSelection() ); } void KPrView::addWordToDictionary() { KPrTextView* edit = m_canvas->currentTextObjectView(); if ( edit ) { TQString word = edit->wordUnderCursor( *edit->cursor() ); if ( !word.isEmpty() ) m_pKPresenterDoc->addWordToDictionary( word ); } } void KPrView::imageEffect() { if (m_canvas->numberOfObjectSelected() > 0) { imageEffectDia = new KPrImageEffectDia(this); KPrPixmapObject *object=m_canvas->getSelectedImage(); imageEffectDia->setPixmap(object->getOriginalPixmap()); imageEffectDia->setEffect(object->getImageEffect(), object->getIEParam1(), object->getIEParam2(), object->getIEParam3()); m_canvas->setToolEditMode(TEM_MOUSE); if (imageEffectDia->exec()==TQDialog::Accepted) { KCommand *cmd=m_canvas->activePage()->setImageEffect(imageEffectDia->getEffect(), imageEffectDia->getParam1(), imageEffectDia->getParam2(), imageEffectDia->getParam3()); if ( cmd ) kPresenterDoc()->addCommand( cmd ); } delete imageEffectDia; imageEffectDia = 0L; } } void KPrView::spellAddAutoCorrect (const TQString & originalword, const TQString & newword) { m_pKPresenterDoc->getAutoFormat()->addAutoFormatEntry( originalword, newword ); } TQPtrList KPrView::listOfResultOfCheckWord( const TQString &word ) { TQPtrList listAction; DefaultDictionary *dict = m_broker->defaultDictionary(); TQStringList lst = dict->suggest( word ); if ( !lst.tqcontains( word )) { TQStringList::ConstIterator it = lst.begin(); for ( int i = 0; it != lst.end() ; ++it, ++i ) { if ( !(*it).isEmpty() ) // in case of removed subtypes or placeholders { KAction * act = new KAction( (*it)); connect( act, TQT_SIGNAL(activated()), TQT_TQOBJECT(this), TQT_SLOT(slotCorrectWord()) ); listAction.append( act ); } } } return listAction; } void KPrView::slotCorrectWord() { KAction * act = (KAction *)(TQT_TQOBJECT(const_cast(sender()))); KPrTextView* edit = m_canvas->currentTextObjectView(); if ( edit ) { edit->selectWordUnderCursor( *(edit->cursor()) ); m_pKPresenterDoc->addCommand(edit->textObject()->replaceSelectionCommand( edit->cursor(), act->text(), i18n("Replace Word"), KoTextDocument::Standard)); } } KCommand * KPrView::getPenCmd( const TQString &name, KoPen pen, LineEnd lb, LineEnd le, int flags ) { KMacroCommand * macro = NULL; //tz TODO remove macro, add parameter for command name to setPen() KCommand * cmd = m_canvas->activePage()->setPen( pen, lb, le, flags ); if( cmd ) { macro = new KMacroCommand( name ); macro->addCommand( cmd ); } return macro; } void KPrView::initialLayoutOfSplitter() { if( !notebar ) { return; } TQSplitter* splitterVertical = static_cast( TQT_TQWIDGET(notebar->tqparent()) ); TQValueList tmpList; int noteHeight = height() / 25; tmpList << height() - noteHeight << noteHeight; splitterVertical->setSizes( tmpList ); } void KPrView::slotChildActivated(bool a) { KoViewChild* ch = child( (KoView*)TQT_TQOBJECT(const_cast(sender())) ); if ( !ch ) return; if( !a ) { m_canvas->exitEditMode(); } KoView::slotChildActivated( a ); } Broker *KPrView::broker() const { return m_broker; } void KPrView::slotUnitChanged( KoUnit::Unit unit ) { h_ruler->setUnit( unit ); v_ruler->setUnit( unit ); if ( statusBar() ) { m_sbUnitLabel->setText( ' ' + KoUnit::unitDescription( unit ) + ' ' ); updateObjectStatusBarItem(); } } void KPrView::documentModified( bool b ) { if ( !statusBar() ) return; if ( b ) m_sbModifiedLabel->setPixmap( KGlobal::iconLoader()->loadIcon( "action-modified", KIcon::Small ) ); else m_sbModifiedLabel->setText( " " ); } void KPrView::loadingFinished() { h_ruler->setPageLayout(m_pKPresenterDoc->pageLayout()); v_ruler->setPageLayout(m_pKPresenterDoc->pageLayout()); slotUpdateRuler(); m_pKPresenterDoc->updateZoomRuler(); updateSideBar(); } #include "KPrView.moc"