void KoPAView::initGUI() { QGridLayout * gridLayout = new QGridLayout( this ); gridLayout->setMargin( 0 ); gridLayout->setSpacing( 0 ); setLayout( gridLayout ); d->canvas = new KoPACanvas( this, d->doc, this ); KoCanvasControllerWidget *canvasController = new KoCanvasControllerWidget( this ); d->canvasController = canvasController; d->canvasController->setCanvas( d->canvas ); KoToolManager::instance()->addController( d->canvasController ); KoToolManager::instance()->registerTools( actionCollection(), d->canvasController ); d->zoomController = new KoZoomController( d->canvasController, zoomHandler(), actionCollection()); connect( d->zoomController, SIGNAL( zoomChanged( KoZoomMode::Mode, qreal ) ), this, SLOT( slotZoomChanged( KoZoomMode::Mode, qreal ) ) ); d->zoomAction = d->zoomController->zoomAction(); // set up status bar message d->status = new QLabel( QString() ); d->status->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); d->status->setMinimumWidth( 300 ); addStatusBarItem( d->status, 1 ); connect( KoToolManager::instance(), SIGNAL( changedStatusText( const QString & ) ), d->status, SLOT( setText( const QString & ) ) ); d->zoomActionWidget = d->zoomAction->createWidget( statusBar() ); addStatusBarItem( d->zoomActionWidget, 0 ); d->zoomController->setZoomMode( KoZoomMode::ZOOM_PAGE ); d->viewModeNormal = new KoPAViewModeNormal( this, d->canvas ); setViewMode(d->viewModeNormal); // The rulers d->horizontalRuler = new KoRuler(this, Qt::Horizontal, viewConverter( d->canvas )); d->horizontalRuler->setShowMousePosition(true); d->horizontalRuler->setUnit(d->doc->unit()); d->verticalRuler = new KoRuler(this, Qt::Vertical, viewConverter( d->canvas )); d->verticalRuler->setUnit(d->doc->unit()); d->verticalRuler->setShowMousePosition(true); new KoRulerController(d->horizontalRuler, d->canvas->resourceManager()); connect(d->doc, SIGNAL(unitChanged(const KoUnit&)), d->horizontalRuler, SLOT(setUnit(const KoUnit&))); connect(d->doc, SIGNAL(unitChanged(const KoUnit&)), d->verticalRuler, SLOT(setUnit(const KoUnit&))); gridLayout->addWidget(d->horizontalRuler, 0, 1); gridLayout->addWidget(d->verticalRuler, 1, 0); gridLayout->addWidget(canvasController, 1, 1 ); connect(d->canvasController->proxyObject, SIGNAL(canvasOffsetXChanged(int)), this, SLOT(pageOffsetChanged())); connect(d->canvasController->proxyObject, SIGNAL(canvasOffsetYChanged(int)), this, SLOT(pageOffsetChanged())); connect(d->canvasController->proxyObject, SIGNAL(sizeChanged(const QSize&)), this, SLOT(pageOffsetChanged())); connect(d->canvasController->proxyObject, SIGNAL(canvasMousePositionChanged(const QPoint&)), this, SLOT(updateMousePosition(const QPoint&))); d->verticalRuler->createGuideToolConnection(d->canvas); d->horizontalRuler->createGuideToolConnection(d->canvas); KoToolBoxFactory toolBoxFactory(d->canvasController, i18n("Tools") ); if (shell()) { shell()->createDockWidget( &toolBoxFactory ); connect( canvasController, SIGNAL( toolOptionWidgetsChanged(const QMap<QString, QWidget *> &, QWidget*) ), shell()->dockerManager(), SLOT( newOptionWidgets(const QMap<QString, QWidget *> &, QWidget*) ) ); } connect(shapeManager(), SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); connect(d->canvas, SIGNAL(documentSize(const QSize&)), d->canvasController->proxyObject, SLOT(updateDocumentSize(const QSize&))); connect(d->canvasController->proxyObject, SIGNAL(moveDocumentOffset(const QPoint&)), d->canvas, SLOT(slotSetDocumentOffset(const QPoint&))); if (shell()) { KoPADocumentStructureDockerFactory structureDockerFactory( KoDocumentSectionView::ThumbnailMode, d->doc->pageType() ); d->documentStructureDocker = qobject_cast<KoPADocumentStructureDocker*>( shell()->createDockWidget( &structureDockerFactory ) ); connect( shell()->partManager(), SIGNAL( activePartChanged( KParts::Part * ) ), d->documentStructureDocker, SLOT( setPart( KParts::Part * ) ) ); connect(d->documentStructureDocker, SIGNAL(pageChanged(KoPAPageBase*)), proxyObject, SLOT(updateActivePage(KoPAPageBase*))); connect(d->documentStructureDocker, SIGNAL(dockerReset()), this, SLOT(reinitDocumentDocker())); KoToolManager::instance()->requestToolActivation( d->canvasController ); } }
KarbonView::KarbonView( KarbonPart* p, QWidget* parent ) : KoView( p, parent ), KXMLGUIBuilder( shell() ), d( new Private( p ) ) { debugView("KarbonView::KarbonView"); setComponentData( KarbonFactory::componentData(), true ); setClientBuilder( this ); if( !p->isReadWrite() ) setXMLFile( QString::fromLatin1( "karbon_readonly.rc" ) ); else setXMLFile( QString::fromLatin1( "karbon.rc" ) ); const int viewMargin = 250; d->canvas = new KarbonCanvas( p ); d->canvas->setParent( this ); d->canvas->setDocumentViewMargin( viewMargin ); connect( d->canvas->shapeManager()->selection(), SIGNAL( selectionChanged() ), this, SLOT( selectionChanged() ) ); d->canvasController = new KoCanvasController(this); d->canvasController->setMinimumSize( QSize(viewMargin+50,viewMargin+50) ); d->canvasController->setCanvas(d->canvas); d->canvasController->setCanvasMode( KoCanvasController::Infinite ); // always show srollbars which fixes some nasty infinite // recursion when scrollbars are disabled during resizing d->canvasController->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); d->canvasController->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); d->canvasController->show(); // set up status bar message d->status = new QLabel( QString(), statusBar() ); d->status->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); d->status->setMinimumWidth( 300 ); addStatusBarItem( d->status, 1 ); connect( KoToolManager::instance(), SIGNAL(changedStatusText(const QString &)), d->status, SLOT(setText(const QString &)) ); d->cursorCoords = new QLabel( QString(), statusBar() ); d->cursorCoords->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); d->cursorCoords->setMinimumWidth( 50 ); addStatusBarItem( d->cursorCoords, 0 ); // TODO maybe the zoomHandler should be a member of the view and not the canvas. // set up the zoom controller KarbonZoomController * zoomController = new KarbonZoomController( d->canvasController, actionCollection() ); zoomController->setPageSize( d->part->document().pageSize() ); addStatusBarItem( zoomController->zoomAction()->createWidget( statusBar() ), 0 ); zoomController->setZoomMode( KoZoomMode::ZOOM_PAGE ); connect( zoomController, SIGNAL(zoomedToSelection()), this, SLOT(zoomSelection())); connect( zoomController, SIGNAL(zoomedToAll()), this, SLOT(zoomDrawing())); KarbonSmallStylePreview * smallPreview = new KarbonSmallStylePreview( statusBar() ); connect( smallPreview, SIGNAL(fillApplied()), this, SLOT(applyFillToSelection()) ); connect( smallPreview, SIGNAL(strokeApplied()), this, SLOT(applyStrokeToSelection()) ); addStatusBarItem( smallPreview, 0 ); // layout: QGridLayout *layout = new QGridLayout(); layout->setMargin(0); layout->addWidget(d->canvasController, 1, 1); initActions(); unsigned int max = part()->maxRecentFiles(); setNumberOfRecentFiles( max ); // widgets: d->horizRuler = new KoRuler( this, Qt::Horizontal, d->canvas->viewConverter() ); d->horizRuler->setShowMousePosition(true); d->horizRuler->setUnit(p->unit()); d->horizRuler->setRightToLeft(false); d->horizRuler->setVisible(false); new KoRulerController( d->horizRuler, d->canvas->resourceProvider() ); layout->addWidget( d->horizRuler, 0, 1 ); connect( p, SIGNAL( unitChanged( KoUnit ) ), this, SLOT( updateUnit( KoUnit ) ) ); d->vertRuler = new KoRuler( this, Qt::Vertical, d->canvas->viewConverter() ); d->vertRuler->setShowMousePosition(true); d->vertRuler->setUnit(p->unit()); d->vertRuler->setVisible(false); layout->addWidget( d->vertRuler, 1, 0 ); connect( d->canvas, SIGNAL(documentOriginChanged( const QPoint &)), this, SLOT(pageOffsetChanged())); connect( d->canvasController, SIGNAL(canvasOffsetXChanged(int)), this, SLOT(pageOffsetChanged())); connect( d->canvasController, SIGNAL(canvasOffsetYChanged(int)), this, SLOT(pageOffsetChanged())); connect( d->canvasController, SIGNAL(canvasMousePositionChanged(const QPoint &)), this, SLOT(mousePositionChanged(const QPoint&))); connect( d->vertRuler, SIGNAL(guideLineCreated(Qt::Orientation,int)), d->canvasController, SLOT( addGuideLine(Qt::Orientation,int) ) ); connect( d->horizRuler, SIGNAL(guideLineCreated(Qt::Orientation,int)), d->canvasController, SLOT( addGuideLine(Qt::Orientation,int) ) ); updateRuler(); if( shell() ) { KoToolManager::instance()->addController( d->canvasController ); KoToolManager::instance()->registerTools( actionCollection(), d->canvasController ); // set the first layer active d->canvasController->canvas()->shapeManager()->selection()->setActiveLayer( part()->document().layers().first() ); //Create Dockers createLayersTabDock(); KoToolBoxFactory toolBoxFactory(d->canvasController, i18n( "Tools" ) ); createDockWidget( &toolBoxFactory ); KoDockerManager *dockerMng = dockerManager(); if (!dockerMng) { dockerMng = new KoDockerManager(this); setDockerManager(dockerMng); } connect( d->canvasController, SIGNAL( toolOptionWidgetsChanged(const QMap<QString, QWidget *> &, KoView *) ), dockerMng, SLOT( newOptionWidgets(const QMap<QString, QWidget *> &, KoView *) ) ); KoToolManager::instance()->requestToolActivation( d->canvasController ); bool b = d->showRulerAction->isChecked(); d->horizRuler->setVisible( b ); d->vertRuler->setVisible( b ); } setLayout(layout); reorganizeGUI(); setFocusPolicy(Qt::NoFocus); }
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); }