void KoView::partSelectEvent( KParts::PartSelectEvent *event ) { if ( event->part() != (KParts::Part *)koDocument() ) { assert( event->part()->inherits( "KoDocument" ) ); KoDocumentChild *child = koDocument()->child( (KoDocument *)event->part() ); if ( child && event->selected() ) { QRegion r = child->frameRegion( matrix() ); r.translate( - canvasXOffset(), - canvasYOffset() ); emit regionInvalidated( r, true ); emit childSelected( child ); } else if ( child ) { QRegion r = child->frameRegion( matrix() ); r.translate( - canvasXOffset(), - canvasYOffset() ); emit regionInvalidated( r, true ); emit childUnselected( child ); } else emit invalidated(); } else emit selected( event->selected() ); }
void KoView::setPartManager( KParts::PartManager *manager ) { d->m_manager = manager; if ( !koDocument()->isSingleViewMode() && manager->parts()->containsRef( koDocument() ) == 0 ) // is there another view registered? { d->m_registered = true; // no, so we have to register now and ungregister again in the DTOR manager->addPart( koDocument(), false ); } else d->m_registered = false; // There is already another view registered for that part... }
KoDocument *KoView::hitTest( const QPoint &viewPos ) { KoViewChild *viewChild; QPoint pos = reverseViewTransformations( viewPos ); KoDocumentChild *docChild = selectedChild(); if ( docChild ) { if ( ( viewChild = child( docChild->document() ) ) ) { if ( viewChild->frameRegion().contains( pos ) ) return 0; } else if ( docChild->frameRegion().contains( pos ) ) return 0; } docChild = activeChild(); if ( docChild ) { if ( ( viewChild = child( docChild->document() ) ) ) { if ( viewChild->frameRegion().contains( pos ) ) return 0; } else if ( docChild->frameRegion().contains( pos ) ) return 0; } return koDocument()->hitTest( pos ); }
KoView::~KoView() { kdDebug(30003) << "KoView::~KoView " << this << endl; delete d->m_scrollTimer; delete d->m_dcopObject; if (!d->m_documentDeleted) { if ( koDocument() && !koDocument()->isSingleViewMode() ) { if ( d->m_manager && d->m_registered ) // if we aren't registered we mustn't unregister :) d->m_manager->removePart( koDocument() ); d->m_doc->removeView(this); d->m_doc->setCurrent( false ); } } delete d; }
KoDocumentChild *KoView::activeChild() { if ( !d->m_manager ) return 0L; KParts::Part *activePart = d->m_manager->activePart(); if ( !activePart || !activePart->inherits( "KoDocument" ) ) return 0L; return koDocument()->child( (KoDocument *)activePart ); }
KoDocumentChild *KoView::selectedChild() { if ( !d->m_manager ) return 0L; KParts::Part *selectedPart = d->m_manager->selectedPart(); if ( !selectedPart || !selectedPart->inherits( "KoDocument" ) ) return 0L; return koDocument()->child( (KoDocument *)selectedPart ); }
void KoView::partActivateEvent( KParts::PartActivateEvent *event ) { if ( event->part() != (KParts::Part *)koDocument() ) { assert( event->part()->inherits( "KoDocument" ) ); KoDocumentChild *child = koDocument()->child( (KoDocument *)event->part() ); if ( child && event->activated() ) { if ( child->isRectangle() && !child->isTransparent() ) { KoViewChild *viewChild = new KoViewChild( child, this ); d->m_children.append( viewChild ); QApplication::setOverrideCursor(waitCursor); // This is the long operation (due to toolbar layout stuff) d->m_manager->setActivePart( child->document(), viewChild->frame()->view() ); QApplication::restoreOverrideCursor(); // Now we can move the frame to the right place viewChild->setInitialFrameGeometry(); } else { emit regionInvalidated( child->frameRegion( matrix() ), true ); } emit childActivated( child ); } else if ( child ) { emit regionInvalidated( child->frameRegion( matrix() ), true ); emit childDeactivated( child ); } else emit invalidated(); } else emit activated( event->activated() ); }
void KoView::paintEverything( QPainter &painter, const QRect &rect, bool transparent ) { koDocument()->paintEverything( painter, rect, transparent, this ); }
void KPrView::initActions() { //setComponentData(KPrFactory::componentData()); if (!koDocument()->isReadWrite() ) setXMLFile( "stage_readonly.rc" ); else setXMLFile( "stage.rc" ); #ifdef CAN_USE_QTWEBKIT // do special stage stuff here m_actionExportHtml = new QAction(i18n("Export as HTML..."), this); actionCollection()->addAction("file_export_html", m_actionExportHtml); connect(m_actionExportHtml, SIGNAL(triggered()), this, SLOT(exportToHtml())); #endif m_actionViewModeNormal = new QAction(m_normalMode->name(), this); m_actionViewModeNormal->setCheckable(true); m_actionViewModeNormal->setChecked(true); m_actionViewModeNormal->setShortcut(QKeySequence("CTRL+F5")); actionCollection()->addAction("view_normal", m_actionViewModeNormal); connect(m_actionViewModeNormal, SIGNAL(triggered()), this, SLOT(showNormal())); m_actionViewModeNotes = new QAction(m_notesMode->name(), this); m_actionViewModeNotes->setCheckable(true); m_actionViewModeNotes->setShortcut(QKeySequence("CTRL+F6")); actionCollection()->addAction("view_notes", m_actionViewModeNotes); connect(m_actionViewModeNotes, SIGNAL(triggered()), this, SLOT(showNotes())); m_actionViewModeSlidesSorter = new QAction(m_slidesSorterMode->name(), this); m_actionViewModeSlidesSorter->setCheckable(true); m_actionViewModeSlidesSorter->setShortcut(QKeySequence("CTRL+F7")); actionCollection()->addAction("view_slides_sorter", m_actionViewModeSlidesSorter); connect(m_actionViewModeSlidesSorter, SIGNAL(triggered()), this, SLOT(showSlidesSorter())); if ( QAction *action = actionCollection()->action("view_masterpages") ) action->setShortcut(QKeySequence("CTRL+F8")); m_actionInsertPictures = new QAction(i18n("Insert Pictures as Slides..."), this); actionCollection()->addAction("insert_pictures", m_actionInsertPictures); connect(m_actionInsertPictures, SIGNAL(activated()), this, SLOT(insertPictures())); QActionGroup *viewModesGroup = new QActionGroup(this); viewModesGroup->addAction(m_actionViewModeNormal); viewModesGroup->addAction(m_actionViewModeNotes); viewModesGroup->addAction(m_actionViewModeSlidesSorter); m_actionCreateAnimation = new QAction( i18n( "Create Appear Animation" ), this ); actionCollection()->addAction( "edit_createanimation", m_actionCreateAnimation ); connect( m_actionCreateAnimation, SIGNAL(activated()), this, SLOT(createAnimation()) ); m_actionEditCustomSlideShows = new QAction( i18n( "Edit Custom Slide Shows..." ), this ); actionCollection()->addAction( "edit_customslideshows", m_actionEditCustomSlideShows ); connect( m_actionEditCustomSlideShows, SIGNAL(activated()), this, SLOT(editCustomSlideShows()) ); m_actionStartPresentation = new KActionMenu(koIcon("view-presentation"), i18n("Start Presentation"), this); actionCollection()->addAction( "slideshow_start", m_actionStartPresentation ); connect( m_actionStartPresentation, SIGNAL(activated()), this, SLOT(startPresentation()) ); QAction* action = new QAction( i18n( "From Current Slide" ), this ); action->setShortcut(QKeySequence("Shift+F5")); m_actionStartPresentation->addAction( action ); connect( action, SIGNAL(activated()), this, SLOT(startPresentation()) ); action = new QAction( i18n( "From First Slide" ), this ); action->setShortcut(QKeySequence("F5")); m_actionStartPresentation->addAction( action ); connect( action, SIGNAL(activated()), this, SLOT(startPresentationFromBeginning()) ); KToggleAction *showStatusbarAction = new KToggleAction(i18n("Show Status Bar"), this); showStatusbarAction->setCheckedState(KGuiItem(i18n("Hide Status Bar"))); showStatusbarAction->setToolTip(i18n("Shows or hides the status bar")); actionCollection()->addAction("showStatusBar", showStatusbarAction); connect(showStatusbarAction, SIGNAL(toggled(bool)), this, SLOT(showStatusBar(bool))); //Update state of status bar action if (showStatusbarAction && statusBar()){ showStatusbarAction->setChecked(! statusBar()->isHidden()); } action = new QAction( i18n( "Configure Slide Show..." ), this ); actionCollection()->addAction( "slideshow_configure", action ); connect( action, SIGNAL(activated()), this, SLOT(configureSlideShow()) ); action = new QAction( i18n( "Configure Presenter View..." ), this ); actionCollection()->addAction( "slideshow_presenterview", action ); connect( action, SIGNAL(activated()), this, SLOT(configurePresenterView()) ); m_actionDrawOnPresentation = new QAction( i18n( "Draw on the presentation..." ), this ); m_actionDrawOnPresentation->setShortcut(Qt::Key_P); m_actionDrawOnPresentation->setShortcutContext(Qt::ApplicationShortcut); actionCollection()->addAction( "draw_on_presentation", m_actionDrawOnPresentation ); connect( m_actionDrawOnPresentation, SIGNAL(activated()), this, SLOT(drawOnPresentation()) ); m_actionDrawOnPresentation->setEnabled(false); m_actionHighlightPresentation = new QAction( i18n( "Highlight the presentation..." ), this ); m_actionHighlightPresentation->setShortcut(Qt::Key_H); m_actionHighlightPresentation->setShortcutContext(Qt::ApplicationShortcut); actionCollection()->addAction( "highlight_presentation", m_actionHighlightPresentation ); connect( m_actionHighlightPresentation, SIGNAL(activated()), this, SLOT(highlightPresentation()) ); m_actionHighlightPresentation->setEnabled(false); m_actionBlackPresentation = new QAction( i18n( "Blackscreen on the presentation..." ), this ); m_actionBlackPresentation->setShortcut(Qt::Key_B); m_actionBlackPresentation->setShortcutContext(Qt::ApplicationShortcut); actionCollection()->addAction( "black_presentation", m_actionBlackPresentation ); connect( m_actionBlackPresentation, SIGNAL(activated()), this, SLOT(blackPresentation()) ); m_actionBlackPresentation->setEnabled(false); connect(tabBar(), SIGNAL(currentChanged(int)), this, SLOT(changeViewByIndex(int))); }
KisView2::KisView2(KisPart2 *part, KisDoc2 * doc, QWidget * parent) : KoView(part, doc, parent), m_d(new KisView2Private()) { setXMLFile("krita.rc"); setFocusPolicy(Qt::NoFocus); if (mainWindow()) { mainWindow()->setDockNestingEnabled(true); actionCollection()->addAction(KStandardAction::KeyBindings, "keybindings", mainWindow()->guiFactory(), SLOT(configureShortcuts())); } m_d->doc = doc; m_d->part = part; m_d->viewConverter = new KisCoordinatesConverter(); KisCanvasController *canvasController = new KisCanvasController(this, actionCollection()); canvasController->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); canvasController->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); canvasController->setDrawShadow(false); canvasController->setCanvasMode(KoCanvasController::Infinite); KisConfig cfg; canvasController->setZoomWithWheel(cfg.zoomWithWheel()); canvasController->setVastScrolling(cfg.vastScrolling()); m_d->canvasController = canvasController; m_d->resourceProvider = new KisCanvasResourceProvider(this); m_d->resourceProvider->resetDisplayProfile(QApplication::desktop()->screenNumber(this)); KConfigGroup grp(KGlobal::config(), "krita/crashprevention"); if (grp.readEntry("CreatingCanvas", false)) { KisConfig cfg; cfg.setUseOpenGL(false); } grp.writeEntry("CreatingCanvas", true); m_d->canvas = new KisCanvas2(m_d->viewConverter, this, doc->shapeController()); grp.writeEntry("CreatingCanvas", false); connect(m_d->resourceProvider, SIGNAL(sigDisplayProfileChanged(const KoColorProfile*)), m_d->canvas, SLOT(slotSetDisplayProfile(const KoColorProfile*))); m_d->canvasController->setCanvas(m_d->canvas); m_d->resourceProvider->setResourceManager(m_d->canvas->resourceManager()); createManagers(); createActions(); m_d->controlFrame = new KisControlFrame(this); Q_ASSERT(m_d->canvasController); KoToolManager::instance()->addController(m_d->canvasController); KoToolManager::instance()->registerTools(actionCollection(), m_d->canvasController); // krita/krita.rc must also be modified to add actions to the menu entries m_d->saveIncremental = new KAction(i18n("Save Incremental &Version"), this); m_d->saveIncremental->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S)); actionCollection()->addAction("save_incremental_version", m_d->saveIncremental); connect(m_d->saveIncremental, SIGNAL(triggered()), this, SLOT(slotSaveIncremental())); m_d->saveIncrementalBackup = new KAction(i18n("Save Incremental Backup"), this); m_d->saveIncrementalBackup->setShortcut(Qt::Key_F4); actionCollection()->addAction("save_incremental_backup", m_d->saveIncrementalBackup); connect(m_d->saveIncrementalBackup, SIGNAL(triggered()), this, SLOT(slotSaveIncrementalBackup())); connect(shell(), SIGNAL(documentSaved()), this, SLOT(slotDocumentSaved())); if (koDocument()->localFilePath().isNull()) { m_d->saveIncremental->setEnabled(false); m_d->saveIncrementalBackup->setEnabled(false); } m_d->totalRefresh = new KAction(i18n("Total Refresh"), this); actionCollection()->addAction("total_refresh", m_d->totalRefresh); m_d->totalRefresh->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_R)); connect(m_d->totalRefresh, SIGNAL(triggered()), this, SLOT(slotTotalRefresh())); m_d->createTemplate = new KAction( i18n( "&Create Template From Image..." ), this); actionCollection()->addAction("createTemplate", m_d->createTemplate); connect(m_d->createTemplate, SIGNAL(triggered()), this, SLOT(slotCreateTemplate())); m_d->mirrorCanvas = new KToggleAction(i18n("Mirror View"), this); m_d->mirrorCanvas->setChecked(false); actionCollection()->addAction("mirror_canvas", m_d->mirrorCanvas); m_d->mirrorCanvas->setShortcut(QKeySequence(Qt::Key_M)); connect(m_d->mirrorCanvas, SIGNAL(toggled(bool)),m_d->canvasController, SLOT(mirrorCanvas(bool))); KAction *rotateCanvasRight = new KAction(i18n("Rotate Canvas Right"), this); actionCollection()->addAction("rotate_canvas_right", rotateCanvasRight); rotateCanvasRight->setShortcut(QKeySequence("Ctrl+]")); connect(rotateCanvasRight, SIGNAL(triggered()),m_d->canvasController, SLOT(rotateCanvasRight15())); KAction *rotateCanvasLeft = new KAction(i18n("Rotate Canvas Left"), this); actionCollection()->addAction("rotate_canvas_left", rotateCanvasLeft); rotateCanvasLeft->setShortcut(QKeySequence("Ctrl+[")); connect(rotateCanvasLeft, SIGNAL(triggered()),m_d->canvasController, SLOT(rotateCanvasLeft15())); KAction *resetCanvasTransformations = new KAction(i18n("Reset Canvas Transformations"), this); actionCollection()->addAction("reset_canvas_transformations", resetCanvasTransformations); resetCanvasTransformations->setShortcut(QKeySequence("Ctrl+'")); connect(resetCanvasTransformations, SIGNAL(triggered()),m_d->canvasController, SLOT(resetCanvasTransformations())); KToggleAction *tAction = new KToggleAction(i18n("Show Status Bar"), this); tAction->setCheckedState(KGuiItem(i18n("Hide Status Bar"))); tAction->setChecked(true); tAction->setToolTip(i18n("Shows or hides the status bar")); actionCollection()->addAction("showStatusBar", tAction); connect(tAction, SIGNAL(toggled(bool)), this, SLOT(showStatusBar(bool))); tAction = new KToggleAction(i18n("Show Canvas Only"), this); tAction->setCheckedState(KGuiItem(i18n("Return to Window"))); tAction->setToolTip(i18n("Shows just the canvas or the whole window")); QList<QKeySequence> shortcuts; shortcuts << QKeySequence(Qt::Key_Tab); tAction->setShortcuts(shortcuts); tAction->setChecked(false); actionCollection()->addAction("view_show_just_the_canvas", tAction); connect(tAction, SIGNAL(toggled(bool)), this, SLOT(showJustTheCanvas(bool))); //Workaround, by default has the same shortcut as mirrorCanvas KAction* action = dynamic_cast<KAction*>(actionCollection()->action("format_italic")); if (action) { action->setShortcut(QKeySequence(), KAction::DefaultShortcut); action->setShortcut(QKeySequence(), KAction::ActiveShortcut); } //Workaround, by default has the same shortcut as hide/show dockers action = dynamic_cast<KAction*>(shell()->actionCollection()->action("view_toggledockers")); if (action) { action->setShortcut(QKeySequence(), KAction::DefaultShortcut); action->setShortcut(QKeySequence(), KAction::ActiveShortcut); } if (shell()) { KoToolBoxFactory toolBoxFactory(m_d->canvasController); shell()->createDockWidget(&toolBoxFactory); connect(canvasController, SIGNAL(toolOptionWidgetsChanged(QList<QWidget*>)), shell()->dockerManager(), SLOT(newOptionWidgets(QList<QWidget*>))); shell()->dockerManager()->setIcons(false); } m_d->statusBar = new KisStatusBar(this); connect(m_d->canvasController->proxyObject, SIGNAL(documentMousePositionChanged(QPointF)), m_d->statusBar, SLOT(documentMousePositionChanged(QPointF))); connect(m_d->nodeManager, SIGNAL(sigNodeActivated(KisNodeSP)), m_d->resourceProvider, SLOT(slotNodeActivated(KisNodeSP))); connect(m_d->nodeManager, SIGNAL(sigNodeActivated(KisNodeSP)), m_d->controlFrame->paintopBox(), SLOT(slotCurrentNodeChanged(KisNodeSP))); connect(m_d->nodeManager, SIGNAL(sigNodeActivated(KisNodeSP)), m_d->doc->image(), SLOT(requestStrokeEnd())); connect(KoToolManager::instance(), SIGNAL(inputDeviceChanged(KoInputDevice)), m_d->controlFrame->paintopBox(), SLOT(slotInputDeviceChanged(KoInputDevice))); connect(KoToolManager::instance(), SIGNAL(changedTool(KoCanvasController*,int)), m_d->controlFrame->paintopBox(), SLOT(slotToolChanged(KoCanvasController*,int))); // 25 px is a distance that works well for Tablet and Mouse events qApp->setStartDragDistance(25); show(); loadPlugins(); // Wait for the async image to have loaded connect(m_d->doc, SIGNAL(sigLoadingFinished()), this, SLOT(slotLoadingFinished())); if (!m_d->doc->isLoading() || m_d->doc->image()) { slotLoadingFinished(); } connect(m_d->canvasController, SIGNAL(documentSizeChanged()), m_d->zoomManager, SLOT(slotScrollAreaSizeChanged())); setAcceptDrops(true); KConfigGroup group(KGlobal::config(), "krita/shortcuts"); foreach(KActionCollection *collection, KActionCollection::allCollections()) { collection->setConfigGroup("krita/shortcuts"); collection->readSettings(&group); }