Ejemplo n.º 1
0
AnimatorType::AnimatorType(const QString& path, const QString& id ):
	CartaObject( CLASS_NAME, path, id ){
        m_select = nullptr;
        m_removed = false;
        m_visible = true;
        _initializeState();
        _makeSelection();

        _initializeCommands();
}
Ejemplo n.º 2
0
int
CIMIClassicView::onCandidateSelectRequest(int index)
{
    unsigned changeMasks = 0;

    if (!m_pIC->isEmpty())
        _makeSelection(index, changeMasks);

    updateWindows(changeMasks);
    return 0;
}
Ejemplo n.º 3
0
bool
CIMIClassicView::onKeyEvent(const CKeyEvent& key)
{
    unsigned changeMasks = 0;

    unsigned keycode = key.code;
    unsigned keyvalue = key.value;
    unsigned modifiers = key.modifiers;
    
#ifdef DEBUG
    printf("Classic View got a key (0x%x-0x%x-0x%x)...", 
           keycode, keyvalue, modifiers);
    if (((modifiers & IM_CTRL_MASK) != 0) && (keyvalue == 'P' || keyvalue=='p'))
        m_pIC->printLattice();
#endif

    if (m_pHotkeyProfile && m_pHotkeyProfile->isModeSwitchKey(key)) {
        setStatusAttrValue(CIMIWinHandler::STATUS_ID_CN, (!m_bCN)?1:0);
        if (!m_pIC->isEmpty ()) {
            changeMasks |= CANDIDATE_MASK | PREEDIT_MASK;
            clearIC ();
        }
        
    } else if (m_pHotkeyProfile && m_pHotkeyProfile->isPunctSwitchKey(key)) {
        // On CTRL+. switch Full/Half punc
        changeMasks |= KEYEVENT_USED;
        setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLPUNC, (!m_bFullPunct)?1:0);
        
    } else if (m_pHotkeyProfile && m_pHotkeyProfile->isSymbolSwitchKey(key)) {
        // On SHIFT+SPACE switch Full/Half symbol
        changeMasks |= KEYEVENT_USED;
        setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLSYMBOL, (!m_bFullSymbol)?1:0);
        
    } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_LEFT)  { // move left
        if (!m_pIC->isEmpty ()) {
            changeMasks |= KEYEVENT_USED;
            _moveLeft (changeMasks);
        }
        
    } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_RIGHT) { // move right
        if (!m_pIC->isEmpty ()) {
            changeMasks |= KEYEVENT_USED;
            _moveRight (changeMasks);
        }
    } else if ( ((modifiers == 0 && keycode == IM_VK_PAGE_UP) ||
                 (m_pHotkeyProfile && m_pHotkeyProfile->isPageUpKey (key))) &&
                !m_pIC->isEmpty() ) {
        changeMasks |= KEYEVENT_USED;
        int sz = m_candiList.size() + ((m_tailSentence.size() > 0)?1:0);
        if (sz > 0 && m_candiPageFirst > 0) {
            m_candiPageFirst -= m_candiWindowSize;
            if (m_candiPageFirst < 0) m_candiPageFirst = 0;
            changeMasks |= CANDIDATE_MASK;
        }
    } else if ( ((modifiers == 0 && keycode == IM_VK_PAGE_DOWN) ||
                 (m_pHotkeyProfile && m_pHotkeyProfile->isPageDownKey (key))) &&
                !m_pIC->isEmpty() ) {
        changeMasks |= KEYEVENT_USED;
        int sz = m_candiList.size() + ((m_tailSentence.size() > 0)?1:0);
        if (sz > 0 && m_candiPageFirst + m_candiWindowSize < sz) {
            m_candiPageFirst += m_candiWindowSize;
            changeMasks |= CANDIDATE_MASK;
        }
    }
    else if (modifiers == IM_CTRL_MASK && 
             (keyvalue >= '0' && keyvalue <= '9') &&
             (m_candiWindowSize >= 10 || keyvalue < ('1' + m_candiWindowSize)) &&
             !m_pIC->isEmpty ()) {
        changeMasks |= KEYEVENT_USED;
        unsigned sel = (keyvalue == '0'? 9: keyvalue-'1');        
        _deleteCandidate (sel, changeMasks);
        goto PROCESSED;

    } else if ((modifiers & (IM_CTRL_MASK | IM_ALT_MASK | IM_RELEASE_MASK)) == 0) {
        if ((keyvalue >= '0' && keyvalue <= '9') &&
                   (m_candiWindowSize >= 10 || keyvalue < ('1' + m_candiWindowSize))) { // try to make selection
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                unsigned sel = (keyvalue == '0'? 9: keyvalue-'1');
                _makeSelection (sel, changeMasks);
            } else {
                m_numeric_mode = true;
            }

            goto PROCESSED;
        } 
        
        if (keyvalue == '.' && m_numeric_mode) {
            m_numeric_mode = false;
            goto PROCESSED;

        }
        
        m_numeric_mode = false;

        if (islower(keyvalue)) {
            changeMasks |= KEYEVENT_USED;
            _insert (keyvalue, changeMasks);

        } else if (keyvalue > 0x20 && keyvalue < 0x7f) {
            changeMasks |= KEYEVENT_USED;
            if (m_pIC->isEmpty ()) {
                _insert (keyvalue, changeMasks);
                _doCommit ();
                clearIC ();
            } else {
                _insert (keyvalue, changeMasks);
            }
            
        } else if (keycode == IM_VK_BACK_SPACE || keycode == IM_VK_DELETE) {
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _erase (keycode == IM_VK_BACK_SPACE, changeMasks);
            }

        } else if (keycode == IM_VK_SPACE) {
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _makeSelection (0, changeMasks);
            }

        } else if (keycode == IM_VK_ENTER) {
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK;
                _doCommit (false);
                clearIC ();
            }

        } else if (keycode == IM_VK_ESCAPE) {
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK;
                clearIC ();
            }

        } else if (keycode == IM_VK_LEFT) { // move left syllable
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _moveLeftSyllable (changeMasks);
            }

        } else if (keycode == IM_VK_RIGHT) { // move right syllable
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _moveRightSyllable (changeMasks);
            }

        } else if (keycode == IM_VK_HOME) { // move home
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _moveHome (changeMasks);
            }

        } else if (keycode == IM_VK_END) { // move end
            if (!m_pIC->isEmpty ()) {
                changeMasks |= KEYEVENT_USED;
                _moveEnd (changeMasks);
            }
        }
    } else {
        goto RETURN;

    } 

PROCESSED:;
    m_pHotkeyProfile->rememberLastKey(key);

RETURN:;

#ifdef DEBUG
    printf("   |-->(Mask=0x%x)\n", changeMasks);
#endif

    updateWindows (changeMasks);
    return changeMasks & KEYEVENT_USED;
}
Ejemplo n.º 4
0
void AnimatorType::_initializeCommands(){

	//A new image frame is being selected.
	addCommandCallback( COMMAND_SET_FRAME, [=] (const QString & /*cmd*/,
					 const QString & params, const QString & /*sessionId*/) -> QString {
	    QString result;
	    bool validInt = false;
	    int index = params.toInt( &validInt );
	    if ( validInt ){
	        result = setFrame( index );
	    }
	    else {
	        result = "Animator index must be a valid integer "+params;
	    }
	    Util::commandPostProcess( result );
	    return result;
	});

	addCommandCallback( "setUpperBoundUser", [=] (const QString & /*cmd*/,
	                     const QString & params, const QString & /*sessionId*/) -> QString {
	        QString result;
	        bool validInt = false;
	        int index = params.toInt( &validInt );
	        if ( validInt ){
	            result = setUpperBoundUser( index );
	        }
	        else {
	            result = "Animator upper bound must be a valid integer "+params;
	        }
	        Util::commandPostProcess( result );
	        return result;
	    });

	addCommandCallback( "setLowerBoundUser", [=] (const QString & /*cmd*/,
	                         const QString & params, const QString & /*sessionId*/) -> QString {
	            QString result;
	            bool validInt = false;
	            int index = params.toInt( &validInt );
	            if ( validInt ){
	                result = setLowerBoundUser( index );
	            }
	            else {
	                result = "Animator lower bound must be a valid integer "+params;
	            }
	            Util::commandPostProcess( result );
	            return result;
	        });

	addCommandCallback( "getSelection", [=] (const QString & /*cmd*/,
	                     const QString & /*params*/, const QString & /*sessionId*/) -> QString {
	    QString selectId;
	    if ( m_select != nullptr){
	        selectId = m_select->getPath();
	    }
	    else {
	        selectId = _makeSelection();
	    }
	    return selectId;
	});

	addCommandCallback( "setEndBehavior", [=] (const QString & /*cmd*/,
	                                    const QString & params, const QString & /*sessionId*/) -> QString {
	    QString result;
	    std::set<QString> keys = {END_BEHAVIOR};
	    std::map<QString,QString> dataValues = Carta::State::UtilState::parseParamMap( params, keys );
	    QString endStr = dataValues[*keys.begin()];
	    result = setEndBehavior( endStr );
	    Util::commandPostProcess( result );
	    return result;
	});


    addCommandCallback( "setFrameRate", [=] (const QString & /*cmd*/,
                                        const QString & params, const QString & /*sessionId*/) -> QString {
        QString result;
        std::set<QString> keys = {RATE};
        std::map<QString,QString> dataValues = Carta::State::UtilState::parseParamMap( params, keys );
        QString rateStr = dataValues[*keys.begin()];
        bool validRate = false;
        int rate = rateStr.toInt( &validRate );
        if ( validRate  ){
            result = setFrameRate( rate );
        }
        else {
            result = "Frame rate must be an integer: "+params;
        }
        Util::commandPostProcess( result );
        return result;
    });

    addCommandCallback( "setFrameStep", [=] (const QString & /*cmd*/,
                                            const QString & params, const QString & /*sessionId*/) -> QString {
        QString result;
        std::set<QString> keys = {STEP};
        std::map<QString,QString> dataValues = Carta::State::UtilState::parseParamMap( params, keys );
        QString stepStr = dataValues[*keys.begin()];
        bool validStep = false;
        int step = stepStr.toInt( &validStep );
        if ( validStep  ){
            result = setFrameStep( step );
        }
        else {
            result = "Frame step must be a positive integer: "+params;
        }
        Util::commandPostProcess( result );
        return result;
    });
}