void ofxTLDepthImageSequence::keyPressed(ofKeyEventArgs& args){
	if(hasFocus()){
		if(args.key == OF_KEY_LEFT){
			selectFrame(MAX(getSelectedFrame()-1, 0));
		}
		else if(args.key == OF_KEY_RIGHT){
			selectFrame(MIN(getSelectedFrame()+1, depthImageSequence->getImageArray().size()-1));
		}
	}
}
void ofxTLVideoPlayer::keyPressed(ofKeyEventArgs& args){
	if(hover){
		if(args.key == OF_KEY_LEFT){
			selectFrame(MAX(selectedFrame-1, 0));
		}
		else if(args.key == OF_KEY_RIGHT){
			selectFrame(MIN(selectedFrame+1, videoThumbs.size()-1));		
		}
	}	
}
void FramestackWidget::slotSelectFrame(int frameNo, int threadNo)
{
    FrameStackItem * frame = findFrame(frameNo, threadNo);
	
	if (frame != 0) {
		setSelected(frame, true);
    	emit selectFrame(frameNo, threadNo, frame->frameName());
	} else {
    	emit selectFrame(frameNo, threadNo, QString());
	}
}
void ofxTLVideoTrack::keyPressed(ofKeyEventArgs& args){
	if(isLoaded() && hasFocus()){
		if(args.key == OF_KEY_LEFT){
			selectFrame(MAX(selectedFrame-1, 0));
			timeline->setCurrentFrame(player->getCurrentFrame());
		}
		else if(args.key == OF_KEY_RIGHT){
			selectFrame(MIN(selectedFrame+1, player->getTotalNumFrames()-1));
			timeline->setCurrentFrame(player->getCurrentFrame());
		}
	}	
}
void CTimelineControl::_OnLButtonUp( uiMouseEvent mouseEvent, int x, int y )
{
	this->releaseCapture();

	m_lbuttonDown = false;
		
	// check select time
	if ( m_mouseActionState == -1 )
	{		
		if ( checkSelectTime( x, y ) == true )
			_onSelectTime( this );		
	}
	else if ( 
		m_mouseActionState == k_mouseActionChangeTime || 
		m_mouseActionState == k_mouseActionChangeValue 
	)
	{
		float time = m_value[m_selectTimeID].time;

		_onUpdateValue( this );

		selectFrame( time );

		if ( m_selectTimeID != -1 )
		{
			m_currentTime = m_value[m_selectTimeID].time;
		}
	}

	// reset action state
	m_mouseActionState = -1;

	update();
}
示例#6
0
static void processEvents(LLDBPlugin* plugin, PDReader* reader, PDWriter* writer)
{
    uint32_t event;

    while ((event = PDRead_get_event(reader)))
    {
        //printf("LLDBPlugin: %d Got event %s\n", event, eventTypes[event]);

        switch (event)
        {
            case PDEventType_GetExceptionLocation : setExceptionLocation(plugin, writer); break;
            case PDEventType_GetCallstack : setCallstack(plugin, writer); break;
            case PDEventType_SetExecutable : setExecutable(plugin, reader); break;
            case PDEventType_SelectThread : selectThread(plugin, reader, writer); break;
            case PDEventType_SelectFrame : selectFrame(plugin, reader, writer); break;
            case PDEventType_GetLocals : setLocals(plugin, writer); break;
            case PDEventType_GetThreads : setThreads(plugin, writer); break;
            case PDEventType_GetSourceFiles : setSourceFiles(plugin, writer); break;
            case PDEventType_SetBreakpoint : setBreakpoint(plugin, reader, writer); break;
            case PDEventType_Action : eventAction(plugin, reader); break;
        }
    }

    setTty(plugin, writer);
}
示例#7
0
// Makes sure that only VarFrameRoot items can be selected
void VariableTree::slotPressed(QListViewItem * item)
{
	if (item == 0) {
		return;
	}
	
	while (item->rtti() == RTTI_VAR_ITEM) {
		item = item->parent();
	}
	
	if (	item->rtti() == RTTI_GLOBAL_ROOT
			|| item->rtti() == RTTI_WATCH_ROOT
			|| item->rtti() == RTTI_WATCH_VAR_ITEM )
	{
		if (selectedFrame_ != 0) {
			setSelected(selectedFrame_, true);
		}
		return;
	}
	
	if (item->rtti() == RTTI_VAR_FRAME_ROOT) {
		VarFrameRoot * frame = (VarFrameRoot*) item;
        emit selectFrame(frame->frameNo(), frame->threadNo());
	}
	
	return;
}
void ofxTLVideoTrack::mouseDragged(ofMouseEventArgs& args, long millis){
	if(isActive()){
		selectFrame( timeline->getTimecode().frameForMillis(millis) );
		if(timeline->getMovePlayheadOnDrag()){
			timeline->setPercentComplete(screenXtoNormalizedX(args.x));
		}
	}
}
void ofxTLVideoTrack::playheadScrubbed(ofxTLPlaybackEventArgs& args){
	
    if(isLoaded() && !currentlyPlaying && playAlongToTimeline){
        selectFrame(args.currentFrame);
//        cout << "after scrub timeline time is " << timeline->getCurrentTime()  << " frame is " << timeline->getCurrentFrame() << " and percent is " << timeline->getPercentComplete() << endl;
//        cout << "while video is " << player->getPosition()*player->getDuration() << " frame is " << player->getCurrentFrame() << " and percent is " << player->getPosition() << endl;
    }
}
示例#10
0
void AnimImages::saveLoad(ResourceSerializer *serializer) {
	Anim::saveLoad(serializer);

	serializer->syncAsUint32LE(_currentFrame);

	if (serializer->isLoading()) {
		selectFrame(_currentFrame);
	}
}
示例#11
0
void ofxTLVideoPlayer::mouseDragged(ofMouseEventArgs& args, bool snapped){
	if(bounds.inside(args.x, args.y)){
		selectFrame( indexForScreenX(args.x) );
		if(timeline->getMovePlayheadOnDrag()){
//			cout << "setting percent complete " << 
			timeline->setPercentComplete(screenXtoNormalizedX(args.x, zoomBounds));
		}
	}
}
bool ofxTLVideoTrack::mousePressed(ofMouseEventArgs& args, long millis){
	ofxTLTrack::mousePressed(args, millis);
	if(isActive()){
		timeline->unselectAll();
		selectFrame( timeline->getTimecode().frameForMillis(millis) );

		if(timeline->getMovePlayheadOnDrag()){
			timeline->setPercentComplete(screenXtoNormalizedX(args.x));
		}
	}
	return false;
}
示例#13
0
bool VariableTree::schedule()
{
    QListViewItem *	child = firstChild();
	VarFrameRoot * frame = 0;

    while (child != 0) {
        if (child->rtti() == RTTI_VAR_FRAME_ROOT) {
			frame = (VarFrameRoot *) child;
			Q_ASSERT( !frame->isWaitingForData() );
			
			if (frame->needsVariables()) {
				if (QApplication::overrideCursor() == 0) {
					QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
				}
				
				// Tell the controller to fetch the variable values
				emit selectFrame(frame->frameNo(), frame->threadNo());
				return true;
			}
		}
		
        child = child->nextSibling();
    }
	
	frame = findFrame(1, currentThread_);
	Q_ASSERT( frame != 0 );
	Q_ASSERT( !frame->needsVariables() );
		
	// All over, nothing left to fetch. 
	// Return to frame 1, and prune the inactive items
	// from the variable tree..
	QApplication::restoreOverrideCursor();
	emit selectFrame(1, currentThread_);
	prune();
	
	return false;
}
MainWindow::MainWindow()
{
    QMenu *fileMenu = new QMenu(tr("&File"));

    fileMenu->addAction(tr("&Open..."), this, SLOT(openFile()),
                        QKeySequence(tr("Ctrl+O", "File|Open")));

    QAction *quitAction = fileMenu->addAction(tr("E&xit"), this, SLOT(close()));
    quitAction->setShortcut(tr("Ctrl+Q"));

    QMenu *editMenu = new QMenu(tr("&Edit"));

    cutAction = editMenu->addAction(tr("Cu&t"), this, SLOT(cutSelection()));
    cutAction->setShortcut(tr("Ctrl+X"));
    cutAction->setEnabled(false);

    copyAction = editMenu->addAction(tr("&Copy"), this, SLOT(copySelection()));
    copyAction->setShortcut(tr("Ctrl+C"));
    copyAction->setEnabled(false);

    pasteAction = editMenu->addAction(tr("&Paste"), this, SLOT(pasteSelection()));
    pasteAction->setShortcut(tr("Ctrl+V"));
    pasteAction->setEnabled(false);

    QMenu *selectMenu = new QMenu(tr("&Select"));
    selectMenu->addAction(tr("&Word"), this, SLOT(selectWord()));
    selectMenu->addAction(tr("&Line"), this, SLOT(selectLine()));
    selectMenu->addAction(tr("&Block"), this, SLOT(selectBlock()));
    selectMenu->addAction(tr("&Frame"), this, SLOT(selectFrame()));

    menuBar()->addMenu(fileMenu);
    menuBar()->addMenu(editMenu);
    menuBar()->addMenu(selectMenu);

    editor = new QTextEdit(this);
    document = new QTextDocument(this);
    editor->setDocument(document);

    connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus()));

    setCentralWidget(editor);
    setWindowTitle(tr("Text Document Writer"));
}
示例#15
0
MainWindow::MainWindow()
{
    QMenu *fileMenu = new QMenu(tr("&File"));

    fileMenu->addAction(tr("E&xit"), this, SLOT(close()),
        QKeySequence(tr("Ctrl+Q", "File|Exit")));

    QMenu *editMenu = new QMenu(tr("&Edit"));

    cutAction = editMenu->addAction(tr("Cu&t"), this, SLOT(cutSelection()),
        QKeySequence(tr("Ctrl+X", "Edit|Cut")));
    copyAction = editMenu->addAction(tr("&Copy"), this, SLOT(copySelection()),
        QKeySequence(tr("Ctrl+C", "Edit|Copy")));
    pasteAction = editMenu->addAction(tr("&Paste"), this,
        SLOT(pasteSelection()), QKeySequence(tr("Ctrl+V", "Edit|Paste")));

    QMenu *selectMenu = new QMenu(tr("&Select"));
    selectMenu->addAction(tr("&Word"), this, SLOT(selectWord()));
    selectMenu->addAction(tr("&Line"), this, SLOT(selectLine()));
    selectMenu->addAction(tr("&Block"), this, SLOT(selectBlock()));
    selectMenu->addAction(tr("&Frame"), this, SLOT(selectFrame()));

    QMenu *insertMenu = new QMenu(tr("&Insert"));

    insertMenu->addAction(tr("&List"), this, SLOT(insertList()),
        QKeySequence(tr("Ctrl+L", "Insert|List")));

    menuBar()->addMenu(fileMenu);
    menuBar()->addMenu(editMenu);
    menuBar()->addMenu(selectMenu);
    menuBar()->addMenu(insertMenu);

    editor = new QTextEdit(this);
    document = new QTextDocument(this);
    editor->setDocument(document);

    connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus()));

    updateMenus();

    setCentralWidget(editor);
    setWindowTitle(tr("Text Document Writer"));
}
示例#16
0
void ModelMaker::registerKey(int key){
	switch(key){
	case 27:	exit(0);				break;
	case 'q':	mtYaw	+= mtRStep;		break;
	case 'w':	mtYaw	-= mtRStep;		break;
	case 'a':	mtPitch  += mtRStep;	break;
	case 's':	mtPitch  -= mtRStep;	break;
	case 'z':	mtRoll	+= mtRStep;		break;
	case 'x':	mtRoll	-= mtRStep;		break;
	case 'e':	mtTransX += mtTStep;	break;
	case 'r':	mtTransX -= mtTStep;	break;
	case 'd':	mtTransY += mtTStep;	break;
	case 'f':	mtTransY -= mtTStep;	break;
	case 'c':	mtTransZ += mtTStep;	break;
	case 'v':	mtTransZ -= mtTStep;	break;
	case 't':	mtRStep *= 2;			break;
	case 'y':	mtRStep *= 0.5;			break;
	case 'g':	mtTStep *= 2;			break;
	case 'h':	mtTStep *= 0.5;			break;

	case 'n':	computeAllGradientEnergys();	break;
	/* Color Mode : Original Color / (Red/Blue) Color */
	case 'p':	colorMode = (colorMode+1)%2;	break;
	/* Show Source Point Cloud or not*/
	case 'o':	showSrc = !showSrc;				break;
	/* Show Destination Point Cloud or not*/
	case 'O':	showDst = !showDst;				break;
	/* Turn On/Off alpha blending */
	case 'i':	alphaBlendingSwitch();			break;
	/* Merge the transformed source point cloud into dst point cloud */
	case '=':	mergeSrcDstPClouds();			break;
	/* skip this src frame and jump to the next src frame */
	case '-':	readData(++fileIndex, true);	break;
	case '_':	selectFrame();					break;
	case '0':	mWriteModel();					break;
	case '9':	mReadModel();					break;
	case '8':	showReadModel = !showReadModel;	break;
	case 'm':	doMatching = true;				break;
	}
	
	isKey = true;
}
void ofxTLVideoPlayer::updateTimeline(){
	if(player->isPlaying() && player->getSpeed() > 0.0){
		
		//		cout << " is playing player frame " << player->getCurrentFrame() << " current frame " << getCurrentFrame() << endl;
		if(timeline->getIsFrameBased()){
			
			if(player->getCurrentFrame() < inFrame || player->getCurrentFrame() > outFrame){
				//				cout << "reset in frame from " << player->getCurrentFrame() << endl;
				player->setFrame(inFrame);
				//				cout << "	to: " << player->getCurrentFrame() << endl;
			}
			
			if(lastFrame > player->getCurrentFrame()){
				currentLoop++;
				//				cout << "LOOPED! with last frame " << lastFrame << " " << player->getCurrentFrame() << " current loop " << currentLoop << endl;
			}
			
			if(timeline->getOutFrame() < getCurrentFrame() || timeline->getInFrame() > getCurrentFrame() ){				
				if(timeline->getInFrame() > player->getCurrentFrame() && timeline->getLoopType() == OF_LOOP_NONE){
					player->stop();
				}
				else {
					//player->setFrame( timeline->getInFrame() % player->getTotalNumFrames());
					selectFrame(timeline->getInFrame());
				}
			}
			
			timeline->setCurrentFrame(getCurrentFrame());
			lastFrame = player->getCurrentFrame();
		}
		else{
			if(timeline->getOutTime() < player->getPosition()*player->getDuration() || timeline->getInTime() > player->getPosition()*player->getDuration() ){
				player->setFrame(timeline->getInOutRange().min * player->getTotalNumFrames());
			}
			timeline->setCurrentTime( player->getPosition() * player->getDuration());
		}
	}
}
示例#18
0
void ofxTLVideoPlayer::draw(){
	
	if(player == NULL){
		return;
	}
	
	if(player->isPlaying() && player->getSpeed() > 0.0){
		
//		cout << " is playing player frame " << player->getCurrentFrame() << " current frame " << getCurrentFrame() << endl;
		if(timeline->getIsFrameBased()){

			if(player->getCurrentFrame() < inFrame || player->getCurrentFrame() > outFrame){
//				cout << "reset in frame from " << player->getCurrentFrame() << endl;
				player->setFrame(inFrame);
//				cout << "	to: " << player->getCurrentFrame() << endl;
			}
			
			if(lastFrame > player->getCurrentFrame()){
				currentLoop++;
//				cout << "LOOPED! with last frame " << lastFrame << " " << player->getCurrentFrame() << " current loop " << currentLoop << endl;
			}
			
			if(timeline->getOutFrame() < getCurrentFrame() || timeline->getInFrame() > getCurrentFrame() ){				
				if(timeline->getInFrame() > player->getCurrentFrame() && timeline->getLoopType() == OF_LOOP_NONE){
					player->stop();
				}
				else {
					//player->setFrame( timeline->getInFrame() % player->getTotalNumFrames());
					selectFrame(timeline->getInFrame());
				}
			}
						
			timeline->setCurrentFrame(getCurrentFrame());
			lastFrame = player->getCurrentFrame();
		}
		else{
			if(timeline->getOutTime() < player->getPosition()*player->getDuration() || timeline->getInTime() > player->getPosition()*player->getDuration() ){
				player->setFrame(timeline->getInOutRange().min * player->getTotalNumFrames());
			}
			timeline->setCurrentTime( player->getPosition() * player->getDuration());
		}
	}
	
//	cout << "in out is " << inFrame << " " << outFrame << endl;
	
	ofPushStyle();
	
	if(thumbsEnabled && getDrawRect().height > 10){
		ofSetColor(255);
		for(int i = 0; i < videoThumbs.size(); i++){
			if(videoThumbs[i].visible){
				videoThumbs[i].thumb.draw(videoThumbs[i].displayRect);
			}
		}
		
		for(int i = 0; i < videoThumbs.size(); i++){
			if(videoThumbs[i].visible){

				if (!thumbsEnabled) {
					ofFill();
					ofSetColor(0);
					ofRect(videoThumbs[i].displayRect);
				}
				ofNoFill();
				ofSetColor(255, 150, 0);
				ofDrawBitmapString(ofToString(videoThumbs[i].framenum), videoThumbs[i].displayRect.x+5, videoThumbs[i].displayRect.y+15);
				ofRect(videoThumbs[i].displayRect);
			}
		}		
	}
	
	int selectedFrameX = screenXForIndex(selectedFrame);
	ofSetColor(0, 125, 255);
	ofLine(selectedFrameX, bounds.y, selectedFrameX, bounds.y+bounds.height);
	ofDrawBitmapString(ofToString(selectedFrame), selectedFrameX, bounds.y+35);
	
	if(inFrame != -1){
		ofSetLineWidth(2);
		ofSetColor(timeline->getColors().highlightColor);
		int inFrameX  = screenXForIndex(inFrame);
		int outFrameX = screenXForIndex(outFrame);
		ofLine(inFrameX, bounds.y, inFrameX, bounds.y+bounds.height);
		ofLine(outFrameX, bounds.y, outFrameX, bounds.y+bounds.height);
		ofSetColor(timeline->getColors().keyColor);
		ofDrawBitmapString("IN:  " + ofToString(inFrameX),  inFrameX  + 5, bounds.y + 10);
		ofDrawBitmapString("OUT: " + ofToString(outFrameX), outFrameX + 5, bounds.y + bounds.height - 20);
	}
	
	ofPopStyle();
}
//void ofxTLVideoTrack::update(ofEventArgs& args){
void ofxTLVideoTrack::update(){
    
	if(!isLoaded()){
		return;
	}
	
   	if(timeline->getTimecontrolTrack() == this){
		
		if(timeline->getIsFrameBased()){
			timeline->setCurrentFrame(player->getCurrentFrame());
		}
		else {
			timeline->setCurrentTimeSeconds(player->getPosition()*player->getDuration());
		}

   		if(getIsPlaying()){
			//no longer used
			if(player->getCurrentFrame() < inFrame || player->getCurrentFrame() > outFrame){
	//            cout << "reset in frame from " << player->getCurrentFrame() << endl;
				player->setFrame(inFrame);
	//            cout << "	to: " << player->getCurrentFrame() << endl;
			}
			
			if(selectedFrame > player->getCurrentFrame()){
				currentLoop++;
				//cout << "LOOPED! with last frame " << lastFrame << " " << player->getCurrentFrame() << " current loop " << currentLoop << endl;
			}

			//if(timeline->getInOutRange().max < player->getPosition()){
			if(timeline->getOutFrame() <= player->getCurrentFrame() || player->getIsMovieDone()){
	//			cout << " OVER " << endl;
				if(timeline->getLoopType() == OF_LOOP_NONE){
	//				cout << " no loop g" << endl;
					stop();                
				}
				else {
					int loopFrame = timeline->getInFrame();
					selectFrame(loopFrame);
					if(playAlongToTimeline){
						player->play();
					}
					ofxTLPlaybackEventArgs args = timeline->createPlaybackEvent();
					ofNotifyEvent(events().playbackLooped, args);                
				}
			}
			//else if(timeline->getInOutRange().min > player->getPosition()){
			if(timeline->getInFrame() > player->getCurrentFrame()){
				//cout << "looping frame " << timeline->getInFrame()  << endl;
				int loopFrame = timeline->getInFrame();
				selectFrame(loopFrame);
			}
			//timeline->setPercentComplete(player->getPosition());
		}
		else{
//	        if(player->getSpeed() != 0){
//		        player->setSpeed(0);
//	        }
			if(player->isPlaying()){
				stop();
			}
		}
	}
	else {
		if(timeline->getCurrentTime() > player->getDuration()){
			player->stop();
		}
	}
	
	player->update();
//	cout << "timeline frame vs video frame " << player->getCurrentFrame() << " vs " << timeline->getCurrentFrame() << endl;
	selectedFrame = player->getCurrentFrame();
}
示例#20
0
void Sprite::paint(sf::RenderWindow *window) {
  window->Draw(getBase());
  selectFrame();
  window->Draw(*sprite);
}
示例#21
0
文件: tuptimeline.cpp 项目: KDE/tupi
bool TupTimeLine::requestFrameAction(int action, int framePos, int layerPos, int scenePos, const QVariant &arg)
{
    /*
    #ifdef K_DEBUG
        #ifdef Q_OS_WIN32
            qDebug() << "[TupTimeLine::requestFrameAction()]";
        #else
            T_FUNCINFO;
        #endif
    #endif
    */

    Q_UNUSED(framePos);

    TupProjectRequest request;

    switch (action) {
            case TupProjectActionBar::InsertFrame:
            {
                 int lastFrame = framesTable(scenePos)->lastFrameByLayer(layerPos);
                 int currentFrame = framesTable(scenePos)->currentColumn();

                 if (currentFrame == lastFrame) {
                     request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, lastFrame + 1,
                                                TupProjectRequest::Add, tr("Frame %1").arg(lastFrame + 2));
                     emit requestTriggered(&request);
                 } else {
                     request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame + 1,
                                                TupProjectRequest::Add, tr("Frame %1").arg(currentFrame + 2));
                     emit requestTriggered(&request);
                     int target = currentFrame + 2;
                     for (int index=target; index <= lastFrame+1; index++) {
                          target++;
                          request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, index, TupProjectRequest::Rename, tr("Frame %1").arg(target));
                          emit requestTriggered(&request);
                     }
                 }

                 return true;
            }
            break;
            case TupProjectActionBar::RemoveFrame:
            {
                 int lastFrame = framesTable(scenePos)->lastFrameByLayer(layerPos);
                 int currentFrame = framesTable(scenePos)->currentColumn(); 

                 if (currentFrame > lastFrame)
                     return false;

                 if (lastFrame == 0) {
                     TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, 0, TupProjectRequest::Reset);
                     emit requestTriggered(&request);
                     return true;
                 }

                 if (currentFrame == lastFrame) {
                     TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame, TupProjectRequest::Remove);
                     emit requestTriggered(&request);

                     if (currentFrame > 0)
                         selectFrame(layerPos, currentFrame-1);
                     else
                         framesTable(scenePos)->clearSelection();
                 } else {
                     request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame, TupProjectRequest::Remove, arg);
                     emit requestTriggered(&request);

                     selectFrame(layerPos, currentFrame);
                 }

                 return true;
            }
            break;
            case TupProjectActionBar::MoveFrameBackward:
            {
                 int currentFrame = framesTable(scenePos)->currentColumn();

                 TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame, TupProjectRequest::Exchange, currentFrame - 1);
                 emit requestTriggered(&request);

                 return true;
            }
            break;
            case TupProjectActionBar::MoveFrameForward:
            {
                 int currentFrame = framesTable(scenePos)->currentColumn();
                 int lastFrame = framesTable(scenePos)->lastFrameByLayer(layerPos);

                 if (currentFrame == lastFrame) {
                     TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, lastFrame + 1, TupProjectRequest::Add, tr("Frame %1").arg(lastFrame + 2));
                     emit requestTriggered(&request);
                 }

                 TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame, TupProjectRequest::Exchange, currentFrame + 1);
                 emit requestTriggered(&request);

                 return true;
            }
            break;
            case TupProjectActionBar::LockFrame:
            {
                 int currentFrame = framesTable(scenePos)->currentColumn();
                 bool locked = framesTable(scenePos)->frameIsLocked(layerPos, currentFrame);

                 TupProjectRequest request = TupRequestBuilder::createFrameRequest(scenePos, layerPos, currentFrame, TupProjectRequest::Lock, !locked);
                 emit requestTriggered(&request);

                 return true;
            }
            break;
            default:
                 // Do nothing
            break;
    }
    
    return false;
}