void KarbonCalligraphyTool::updateSelectedPath() { KoPathShape *oldSelectedPath = m_selectedPath; // save old value KoSelection *selection = canvas()->shapeManager()->selection(); // null pointer if it the selection isn't a KoPathShape // or if the selection is empty m_selectedPath = dynamic_cast<KoPathShape *>(selection->firstSelectedShape()); // or if it's a KoPathShape but with no or more than one subpaths if (m_selectedPath && m_selectedPath->subpathCount() != 1) { m_selectedPath = 0; } // or if there ora none or more than 1 shapes selected if (selection->count() != 1) { m_selectedPath = 0; } // emit signal it there wasn't a selected path and now there is // or the other way around if ((m_selectedPath != 0) != (oldSelectedPath != 0)) { emit pathSelectedChanged(m_selectedPath != 0); } }
void StrokeDocker::applyChanges() { KoCanvasController* canvasController = KoToolManager::instance()->activeCanvasController(); KoSelection *selection = canvasController->canvas()->shapeManager()->selection(); canvasController->canvas()->resourceProvider()->setActiveBorder( d->border ); if( ! selection || ! selection->count() ) return; KoLineBorder * newBorder = new KoLineBorder(d->border); KoLineBorder * oldBorder = dynamic_cast<KoLineBorder*>( selection->firstSelectedShape()->border() ); if( oldBorder ) { newBorder->setColor( oldBorder->color() ); newBorder->setLineBrush( oldBorder->lineBrush() ); } KoShapeBorderCommand *cmd = new KoShapeBorderCommand( selection->selectedShapes(), newBorder ); canvasController->canvas()->addCommand( cmd ); }
void TestSelection::testSelectedShapes() { KoSelection selection; MockShape *shape1 = new MockShape(); MockShape *shape2 = new MockShape(); MockShape *shape3 = new MockShape(); QCOMPARE(selection.count(), 0); QCOMPARE(selection.selectedShapes().count(), 0); selection.select(shape1); QCOMPARE(selection.count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 1); selection.select(shape1); // same one. QCOMPARE(selection.count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 1); QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 1); selection.select(shape2); selection.select(shape3); QCOMPARE(selection.count(), 3); QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 3); QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 3); QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 3); MockGroup *group1 = new MockGroup(); group1->addShape(shape1); group1->addShape(shape2); selection.select(group1); QCOMPARE(selection.count(), 3); // don't return the grouping shape. // Stripped returns no groups, so simply all 3 shapes QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 3); // stripped returns no groups; so simply all shapes. QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 3); // toplevel returns shape3 and group1 QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 2); MockGroup *group2 = new MockGroup(); group2->addShape(shape3); group2->addShape(group1); selection.select(group2); QCOMPARE(selection.count(), 3); // thats 5 minus 2 grouping shapes. // Stripped returns no groups, so simply all 3 shapes QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 3); // Stripped returns no groups, so simply all 3 shapes QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 3); // toplevel returns only group2 QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 1); group1->removeShape(shape1); group1->removeShape(shape2); MockContainer *container = new MockContainer(); container->addShape(shape1); container->addShape(shape2); selection.select(container); QCOMPARE(selection.count(), 4); // thats 6 minus 2 grouping shapes. // Stripped returns no groups, so simply all 3 shapes + container QCOMPARE(selection.selectedShapes(KoFlake::FullSelection).count(), 4); // Stripped returns no groups, and no children of a container. So; container + shape3 QCOMPARE(selection.selectedShapes(KoFlake::StrippedSelection).count(), 2); // toplevel returns only group2 + container QCOMPARE(selection.selectedShapes(KoFlake::TopLevelSelection).count(), 2); delete group2; delete container; }