Ejemplo n.º 1
0
bool
CharacterAfter(void)
{
    const bool consumed = false;

    switch (ultramod.machine.state)
    {
        case NORMAL_STATE:
            break;

        case HELD_STATE:

            // The user typing any character commits him to the "momentary" state
            if (ultramod.event.pressed)
                ultramod.machine.state = MOMENTARY_STATE;
            break;

        case MOMENTARY_STATE:
            break;

        case ONE_SHOT_STATE:

            // This character was the one-shot character. Return to normal.
            if (ultramod.event.pressed)
                SetNormalState();
            break;

        case LOCKED_STATE:
            break;
    }

    return consumed;
}
Ejemplo n.º 2
0
VOID CDXCtrlButton::SetCheckState(BOOL bChecked)
{
	if(m_bCheck)
	{
		if(m_bChecked != bChecked)
		{
			SetPushedState();
			m_bChecked = bChecked;
			SetNormalState();
		}
	}
}
Ejemplo n.º 3
0
BOOL CDXCtrlButton::OnMouseMove(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if(m_bClicked)
	{
		if(HitTest(LOWORD(lParam), HIWORD(lParam)))
			SetPushedState();
		else
			SetNormalState();
		return TRUE;
	}
	return FALSE;
}
Ejemplo n.º 4
0
void UltramodMatrixScan(void)
{
    const uint16_t now = timer_read();

    switch (ultramod.machine.state)
    {
        case NORMAL_STATE:
            break;

        case HELD_STATE:
            break;

        case MOMENTARY_STATE:
            break;

        case ONE_SHOT_STATE:
            {
                const bool oneShotTimedOut = TimedOut(now,
                                                      ultramod.machine.lastActionTime,
                                                      ultramod.settings.oneShotTimeout);
                if (oneShotTimedOut)
                    SetNormalState();
            }
            break;

        case LOCKED_STATE:
            {
                const bool lockTimedOut = TimedOut(now,
                                                   ultramod.machine.lastActionTime,
                                                   ultramod.settings.lockedTimeout);
                if (lockTimedOut)
                    SetNormalState();
            }
            break;
    }

    UltramodSetLeds();
}
Ejemplo n.º 5
0
BOOL CDXCtrlButton::OnLeftButtonUp(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if(m_bClicked)
	{
		m_bClicked = FALSE;
		if(m_bPushed)
		{
			if(m_bCheck)
				m_bChecked ^= TRUE;
			SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(m_dwId, BN_CLICKED), (LPARAM)this);
		}
		SetNormalState();			
		if(m_bRepeat && m_bCheck == FALSE)
			KillTimer(hwnd, IDT_REPEAT);
		return TRUE;
	}
	return FALSE;
}
Ejemplo n.º 6
0
BOOL CDXCtrlButton::OnTimer(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if(wParam == IDT_REPEAT && m_bPushed)
	{
		KillTimer(hwnd, IDT_REPEAT);
		if(m_bEnabled)
		{
			SetTimer(hwnd, IDT_REPEAT, 25, NULL);
			SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(m_dwId, BN_CLICKED), (LPARAM)this);
		}
		else
		{
			SetNormalState();
			m_bClicked = FALSE;
		}
		return TRUE;
	}
	return FALSE;
}
Ejemplo n.º 7
0
bool
ModifierBefore(void)
{
    bool consumed = false;

    // Make sure modifier chord matches exactly
    //    if (ultramod.machine.modifierBit != get_mods())
    //        return;

    switch (ultramod.machine.state)
    {
        case NORMAL_STATE:
            if (ultramod.event.pressed)
            {
                ultramod.machine.modifierKey = ultramod.event.pKeyRecord->event.key;
                ultramod.machine.state = HELD_STATE;
                consumed = true;
            }
            break;

        case HELD_STATE:
            if (ultramod.event.released)
            {
                const bool tooLateForSingleTap = TimedOut(ultramod.event.time,
                                                          ultramod.machine.modifierPressedTime,
                                                          ultramod.settings.singleTapTimeout);
                if (tooLateForSingleTap)
                {
                    SetNormalState();
                }
                else
                {
                    ultramod.machine.lastActionTime = ultramod.event.time;
                    ultramod.machine.state = ONE_SHOT_STATE;
                }
                consumed = true;
            }
            break;

        case MOMENTARY_STATE:
            if (ultramod.event.released)
            {
                SetNormalState();
                consumed = true;
            }
            break;

        case ONE_SHOT_STATE:
            if (ultramod.event.pressed)
            {
                const bool oneShotTimedOut = TimedOut(ultramod.event.time,
                                                      ultramod.machine.modifierReleasedTime,
                                                      ultramod.settings.doubleTapTimeout);
                if (oneShotTimedOut)
                    SetNormalState();
                else
                    ultramod.machine.state = LOCKED_STATE;
                consumed = true;
            }
            break;

        case LOCKED_STATE:
            if (ultramod.event.pressed)
            {
                SetNormalState();
                consumed = true;
            }
            break;
    }

    // todo: Why does this state not stick?
    if (ultramod.machine.state != NORMAL_STATE)
    {
        add_mods(ultramod.machine.modifierBit);
        layer_on(ultramod.machine.layer);
    }

    return consumed;
}