void AudioTimingControllerKaraoke::OnMarkerDrag(std::vector<AudioMarker*> const& m, int new_position, int) { int old_position = m[0]->GetPosition(); int syl = MoveMarker(static_cast<KaraokeMarker *>(m[0]), new_position); if (syl < 0) return; if (m.size() > 1) { int delta = m[0]->GetPosition() - old_position; for (AudioMarker *marker : m | boost::adaptors::sliced(1, m.size())) MoveMarker(static_cast<KaraokeMarker *>(marker), marker->GetPosition() + delta); syl = cur_syl; } AnnounceChanges(syl); }
void AudioTimingControllerKaraoke::ModifyLength(int delta, bool shift_following) { if (cur_syl == markers.size()) return; int cur, end, step; if (delta < 0) { cur = cur_syl; end = shift_following ? markers.size() : cur_syl + 1; step = 1; } else { cur = shift_following ? markers.size() - 1 : cur_syl; end = cur_syl - 1; step = -1; } for (; cur != end; cur += step) { MoveMarker(&markers[cur], markers[cur] + delta * 10); } AnnounceChanges(cur_syl); }
//************************************************************************ // CLCDInput::ProcessKeyEvent //************************************************************************ LRESULT CLCDInput::ProcessKeyEvent(int Code, WPARAM wParam, LPARAM lParam) { // Event verarbeiten if(Code == HC_ACTION) { KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT *)(lParam); bool bKeyDown = !(key->flags & LLKHF_UP); bool bToggled = (m_acKeyboardState[key->vkCode] & 0x0F) != 0; if(bKeyDown) bToggled = !bToggled; m_acKeyboardState[key->vkCode] = (bKeyDown?0x80:0x00) | (bToggled?0x01:0x00); if(key->vkCode == VK_LSHIFT || key->vkCode == VK_RSHIFT) m_acKeyboardState[VK_SHIFT] = m_acKeyboardState[key->vkCode]; else if(key->vkCode == VK_LCONTROL || key->vkCode == VK_RCONTROL) m_acKeyboardState[VK_CONTROL] = m_acKeyboardState[key->vkCode]; else if(key->vkCode == VK_LMENU || key->vkCode == VK_RMENU) m_acKeyboardState[VK_MENU] = m_acKeyboardState[key->vkCode]; /* if(bKeyDown) TRACE(_T("Key pressed: %i\n"),key->vkCode); else TRACE(_T("Key released: %i\n"),key->vkCode); */ // Only handle Keyup if(bKeyDown) { // Actions with Control/Menu keys if((m_acKeyboardState[VK_LMENU] & 0x80 || m_acKeyboardState[VK_CONTROL] & 0x80) && m_acKeyboardState[VK_SHIFT] & 0x80) { ActivateKeyboardLayout((HKL)HKL_NEXT,0);//KLF_SETFORPROCESS); TRACE(_T("Keyboardlayout switched!\n")); return 1; } int res = 0,size = 0,dir = MARKER_HORIZONTAL,scroll = 0; /* if(key->vkCode == VK_DELETE) { dir = MARKER_HOLD; res = -1; if(m_strText[m_Marker[0].iPosition] == '\r') res = -2; if(m_strText.length() >= m_Marker[0].iPosition + -res) { m_strText.erase(m_Marker[0].iPosition,-res); scroll = 1; size = 1; } else { res = 0; } } else */if(key->vkCode == VK_BACK ) { if(m_Marker[0].iPosition != 0) { res = -1; if(m_strText[m_Marker[0].iPosition+res] == '\n') res = -2; m_strText.erase(m_Marker[0].iPosition+res,-res); scroll = 1; size = res; } } // Marker navigation else if (key->vkCode == VK_INSERT) { m_bInsert = !m_bInsert; } else if(key->vkCode == VK_HOME) { res = m_vLineOffsets[m_Marker[0].iLine].iOffset - m_Marker[0].iPosition; scroll = 1; } else if(key->vkCode == VK_END) { if(m_vLineOffsets.size()-1 == m_Marker[0].iLine) res = (int)m_strText.length() - m_Marker[0].iPosition; else res = (m_vLineOffsets[m_Marker[0].iLine+1].iOffset - 1 - m_vLineOffsets[m_Marker[0].iLine+1].bLineBreak) -m_Marker[0].iPosition; scroll = 1; } else if(key->vkCode == VK_UP) { res = -1; dir = MARKER_VERTICAL; } else if(key->vkCode == VK_DOWN) { res = 1; dir = MARKER_VERTICAL; } else if(key->vkCode == VK_LEFT) res = -1; else if(key->vkCode == VK_RIGHT) res = 1; else { #ifdef _UNICODE TCHAR output[4]; #else unsigned char output[2]; #endif if(key->vkCode == VK_RETURN) { bool bCtrlDown = (m_acKeyboardState[VK_CONTROL] & 0x80) != 0; if( bCtrlDown != (m_iBreakKeys == KEYS_RETURN)) { DeactivateInput(); //m_pParent->OnInputFinished(); return 1; } else { res = 2; output[0] = '\r'; output[1] = '\n'; output[2] = 0; } } else { #ifdef _UNICODE res = ToUnicode(key->vkCode,key->scanCode,m_acKeyboardState,output,4,0); #else res = ToAscii( key->vkCode,key->scanCode,m_acKeyboardState,(WORD*)output,0); #endif } if(res <= 0) res = 0; else { if(output[0] != '\r' && output[0] <= 0x001F) return 1; if(m_bInsert || m_strText[m_Marker[0].iPosition] == '\r') m_strText.insert(m_Marker[0].iPosition,(TCHAR*)output,res); else m_strText.replace(m_Marker[0].iPosition,res,(TCHAR*)output); scroll = 1; size = res; } } if(res != 0) { if(dir != MARKER_HOLD) { MoveMarker(dir,res); } UpdateOffsets(size); UpdateMarker(); ScrollToMarker(); m_lInputTime = GetTickCount(); } //WrapLine(); // ---- // Block this KeyEvent } return 1; } return CallNextHookEx(m_hKBHook, Code, wParam, lParam); }
void AudioTimingControllerKaraoke::ModifyStart(int delta) { if (cur_syl == 0) return; MoveMarker(&markers[cur_syl - 1], markers[cur_syl - 1] + delta * 10); AnnounceChanges(cur_syl); }