void PaintWidget::selectFigure( int layer, int obj) { if( painter.inKeyPressedHandler ) return; GObjectInterface *o = painter.layers[layer]->object( obj ); if(layer != painter.currentLayer) { painter.currentLayer = layer; painter.setFrame( painter.currentFrame, false ); emit layerSelected(); } if( o == 0 ) { painter.selection.reset(); emit figureSelected( layer, -1 ); return; } if( !o->isVisible() || o->isBlocked()) { painter.selection.reset(); painter.update(); return; } painter.selection.setSelected( o ); painter.update(); emit figureSelected( layer, obj ); }
bool PaintWidget::reset() { emit zoomEvent(scaleVal = 1); setFrame(0.0, false); if( !painter.isEnabled() ) return false; setViewportColor( QColor( 100, 100, 100 ) ); BACKGROUND( painter.background )->reset(); setViewportType( fixedViewport ); setViewportFixedSize( QSize( 640, 480 ) ); for(int i=0; i<painter.layers.size(); i++) { while( painter.layers[i]->countObjects() > 0 ) delete painter.layers[i]->remove( 0 ); delete painter.layers[i]; } painter.layers.clear(); painter.addLayer(true, false, tr("Layer ") + "0"); painter.selection.reset(); painter.inKeyPressedHandler = false; painter.inSelectionMode = false; update(); emit figureSelected( 0, -1); emit allLayersChanged(); emit countFramesChanged( countFrames() ); return true; }
void RealPaintWidget::setFromUndo(QObject* undo) { UndoStructure* properties = UNDO(undo); fixedSize = properties->fixedSize; size = properties->size; for(int i=0; i<layers.size(); i++) delete layers[i]; layers.clear(); //QMessageBox::warning(this,"Trace2",QString::number(properties->layers.size())); for(int i=0; i<properties->layers.size(); i++) layers.append(properties->layers[i]->copyLayer()); //delete background; //background = properties->background; currentLayer = properties->currentLayer; currentFrame = properties->currentFrame; inKeyPressedHandler = properties->inKeyPressedHandler; inSelectionMode = properties->inSelectionMode; selectionRect = properties->selectionRect; selection.reset(); emit figureSelected(0,-1); update(); emit undoEvents(); }
RealPaintWidget::RealPaintWidget( plugin::PluginsManager *manager, QWidget *parent ): RPWInterface( parent ), background( 0 ), fixedSize( true ), size( 640, 480 ), selection( manager, this, QRect( QPoint( 0, 0 ), size ) ), inKeyPressedHandler( false ), currentTool( 0 ), inSelectionMode( false ), _manager(manager) { GLayer* layer = new GLayer(); layer->setVisible(true); layer->setObjectName(tr("Layer") + " 0"); layers.append(layer); currentLayer = 0; currentFrame = 0; layers[currentLayer]->addFrameForLayer(currentFrame,false); emit figureSelected(currentLayer, -1); paintConMenu = new QMenu(this); propertiesAct = paintConMenu->addAction(tr("Properties...")); setAutoFillBackground( false ); resize( size ); connect( propertiesAct,SIGNAL( triggered( bool ) ), this, SLOT( onPropertiesObj() ) ); connect( &selection, SIGNAL( changed() ), this, SLOT( update() ) ); manager->addPlugins(this, "RealPaint"); isMousePress = false; setMouseTracking(true); //qDebug() << getPoint(); QPoint p(10,10); emit mouseMoveEvent(QWidget::mapToParent(p),p); }
bool PaintWidget::load( QDataStream &stream ) { if( !painter.isEnabled() ) return false; for(int i=0; i<painter.layers.size(); i++) { while( painter.layers[i]->countObjects() > 0 ) delete painter.layers[i]->remove( 0 ); delete painter.layers[i]; } painter.layers.clear(); QString signature; stream >> signature; if( signature != SIGNATURE ) return false; stream >> transparent; stream >> viewportColor; if( !transparent ) setViewportColor( viewportColor ); else doViewportTransparent(); BACKGROUND( painter.background )->load( stream ); int type; stream >> type; setViewportType( ( ViewportType ) type ); stream >> painter.size; setViewportFixedSize( painter.size ); int countLayer; stream >> countLayer; for(int i=0; i<countLayer; i++) { QString name; stream >> name; painter.addLayer(true, false, name); painter.layers[i]->loadLayer( stream ); } painter.selection.reset(); painter.inKeyPressedHandler = false; painter.inSelectionMode = false; update(); emit figureSelected( 0 , -1); emit allLayersChanged(); emit countFramesChanged( countFrames() ); setFrame(0.0, false); return true; }
void RealPaintWidget::addLayer(bool visible, bool blocked, const QString &name) { GLayer* layer = new GLayer(); layer->setObjectName(name); layer->setVisible(visible); layer->setBlocked(blocked); layer->addFrameForLayer(0, false); layers.append(layer); currentLayer = layers.size()-1; selection.reset(); emit figureSelected(currentLayer, -1); update(); emit StateChanged(tr("Add Layer")); }
void PaintWidget::deleteSelected() { if( !canDeleteSelected() ) return; int count = painter.selection.countSelected(); for( int i = 0; i < count; i++ ) { delete painter.layers[painter.currentLayer]->remove( painter.layers[painter.currentLayer]->objectIndex( GOBJECT(painter.selection.selected( i ))) ); } painter.selection.reset(); update(); emit figureSelected( painter.currentLayer , -1); emit allLayersChanged(); emit countFramesChanged( countFrames() ); emit StateChanged("Delete"); }
void PaintWidget::pasteFromClipboard() { if( !canPasteFromClipboard() ) return; const QMimeData *mime = QApplication::clipboard()->mimeData(); if( mime == 0 ) return; QByteArray data = mime->data( MIMETYPE ); if( data.size() <= 0 ) return; QDataStream stream( data ); GObjectInterface *object = GObject::loadObject( stream ); if( object == 0 ) return; GContainer *o = qobject_cast< GContainer* >( object ); if( ( o == 0 ) || ( o->countObjects() == 0 ) ) { delete object; return; } int frameObj = (int)(o->frame()); o->deleteFrames(frameObj); o->addFrame(painter.currentFrame, true); o->deleteFrames(painter.currentFrame); QVector <int> frames = painter.layers[painter.currentLayer]->getFrames(); int countFrames = frames.size(); for( int i = 0; i < countFrames; i++ ) { if( frames[i] != painter.currentFrame ) o->addFrame(frames[i], false); } o->cloneFrameToAll(painter.currentFrame); for( int i = 0; i < countFrames; i++ ) { if( painter.layers[painter.currentLayer]->getPositionFrame(i) != painter.currentFrame ) { o->setFrame( painter.layers[painter.currentLayer]->getPositionFrame(i) ); o->setVisible( false ); o->setBlocked( false ); } else { o->setFrame( painter.layers[painter.currentLayer]->getPositionFrame(i) ); o->setVisible( true ); o->setBlocked( false ); } } o->setFrame( painter.currentFrame ); int count = o->countObjects(); for( int i = count - 1; i >= 0; i-- ) painter.layers[painter.currentLayer]->add( o->object( i ), true ); painter.selection.reset(); update(); emit figureSelected( painter.currentLayer , -1); emit allLayersChanged(); emit StateChanged("Paste"); }
void RealPaintWidget::mouseReleaseEvent( QMouseEvent * event ) { QPoint pos = event->pos(); int button = event->button(); if(button == Qt::RightButton) { return; } if( fixedSize ) { QSize sz = rect().size() - size; pos -= QPoint( sz.width() / 2, sz.height() / 2 ); } if( inSelectionMode ) { inSelectionMode = false; int countObjects = layers[currentLayer]->countObjects(); selection.reset(); for( int i = 0; i < countObjects; i++ ) { if( !layers[currentLayer]->object( i )->isVisible() || layers[currentLayer]->object( i )->isBlocked() ) continue; if( layers[currentLayer]->object( i )->boundingRect().intersects( selectionRect ) ) selection.addSelected( layers[currentLayer]->object( i ) ); } if( selection.countSelected() != 1 ) { //emit figureSelected( currentLayer, -1 ); update(); return; } else emit figureSelected(currentLayer, layers[currentLayer]->objectIndex( GOBJECT(selection.selected( 0 )) ) ); update(); return; } if( currentTool != 0 ) { GObjectInterface *s = layers[currentLayer]->object( 0 ); if( s != 0 ) s->cloneFrameToAll(currentFrame); int countFrames = layers[currentLayer]->countFrames(); for( int i = 0; i < countFrames; i++ ) { if( layers[currentLayer]->getPositionFrame(i) != currentFrame ) { s->setFrame( layers[currentLayer]->getPositionFrame(i) ); s->setVisible( false ); s->setBlocked( false ); } } s->setFrame( currentFrame ); //emit StateChanged("Create object"); isMousePress = false; if( currentTool->createStyle() == FigureToolInterface::paint ) { selection.setSelected( s ); update(); return; } } selection.mouseRelease( event->button(), pos, event->modifiers() ); }
void RealPaintWidget::mousePressEvent( QMouseEvent *event ) { QPoint pos = event->pos(); int button = event->button(); if(button == Qt::LeftButton || selection.isInAddPointMode()) { if( fixedSize ) { QSize sz = rect().size() - size; pos -= QPoint( sz.width() / 2, sz.height() / 2 ); } if( currentTool != 0 ) { isMousePress = true; GObjectInterface * o = GObject::create( currentTool, pos, currentTool->figureName(), currentFrame); layers[currentLayer]->add( GOBJECT(o), true ); selection.setSelected( o ); selection.setIsNewFigure(true); emit objectCreated(); emit figureSelected( currentLayer, layers[currentLayer]->objectIndex( GOBJECT(o) ) ); if( currentTool->createStyle() != FigureToolInterface::paint ) { selection.mousePress( event->button(), pos, event->modifiers() ); selection.setCreateFigureMode( true ); } else selection.reset(); QVector <int> frames = layers[currentLayer]->getFrames(); for( int i = 0; i < frames.size(); i++ ) { if( frames[i] != currentFrame ) o->addFrame(frames[i], false); } return; } if( selection.mousePress( event->button(), pos, event->modifiers() ) ) return; if(button == Qt::RightButton && !selection.isInAddPointMode()) { paintConMenu->exec(QWidget::mapToGlobal(pos),0); return; } GContainer * cont = GCONTAINER(selection.getSelected()); if(button != Qt::RightButton && cont != 0 && selection.isInAddPointMode() && cont->countObjects()==1) { cont->addPointToEnd(pos); emit StateChanged("Add point"); return; } GObjectInterface* o = 0; for(int i=0;i<layers.size();i++) { o = layers[i]->contains( pos ); if(o != 0) { currentLayer = i; break; } } if( o == 0 ) { selection.reset(); emit figureSelected( currentLayer, -1 ); inSelectionMode = true; selectionRect = QRect( pos, QSize( 0, 0 ) ); update(); return; } if( ( ( event->modifiers() & Qt::ControlModifier ) == 0 ) || ( selection.countSelected() <= 0 ) ) { selection.setSelected( o ); emit figureSelected(currentLayer, layers[currentLayer]->objectIndex( GOBJECT(o) ) ); } else { selection.addSelected( o ); inKeyPressedHandler = true; emit figureSelected( currentLayer, -1 ); inKeyPressedHandler = false; } selection.mousePress( event->button(), pos, event->modifiers() ); } if(button == Qt::RightButton && !(selection.isInAddPointMode())) { if(selection.countSelected() != 1) propertiesAct->setEnabled(false); else propertiesAct->setEnabled(true); paintConMenu->exec(QWidget::mapToGlobal(pos),0); } }