Пример #1
0
void wxG3DCanvas::handleKeyDown(wxKeyEvent& event) {
    if (_gWindow->keyboardEvents.length() > 200) {
        _gWindow->keyboardEvents.clear();
    }

    GEvent e;
    e.key.type = SDL_KEYDOWN;
    e.key.state = SDL_PRESSED;
    
    e.key.keysym.sym = wxKeyCodeToSDLCode(event.KeyCode());

#if (wxUSE_UNICODE == 1)
    e.key.keysym.unicode = event.GetUnicodeKey();
#elif defined(wxHAS_RAW_KEY_CODES)
    e.key.keysym.unicode = event.GetRawKeyCode();
#else
    e.key.keysym.unicode = e.key.keysym.sym;
#endif

#if defined(wxHAS_RAW_KEY_CODES)
    e.key.keysym.scancode = event.GetRawKeyCode();
#else
    e.key.keysym.scancode = 0;
#endif

    _gWindow->keyboardEvents.pushBack(e);
    event.Skip();
}
Пример #2
0
void LabelTrack::KeyEvent(double sel0, double sel1, wxKeyEvent & event)
{
   long keyCode = event.KeyCode();

   if (mSelIndex >= 0) {
      switch (keyCode) {
      case WXK_BACK:{
            int len = mLabels[mSelIndex]->title.Length();
            if (len > 0)
               mLabels[mSelIndex]->title =
                   mLabels[mSelIndex]->title.Left(len - 1);
         }
         break;

      case WXK_RETURN:
         if (mLabels[mSelIndex]->title == "") {
            delete mLabels[mSelIndex];
            mLabels.RemoveAt(mSelIndex);
         }
         mSelIndex = -1;
         break;

      case WXK_TAB:
         if (event.ShiftDown()) {
            if (mSelIndex > 0)
               mSelIndex--;
         } else {
            if (mSelIndex < (int)mLabels.Count() - 1)
               mSelIndex++;
         }
         break;

      default:
         mLabels[mSelIndex]->title += keyCode;
         break;
      }
   } else {
      // Create new label

      LabelStruct *l = new LabelStruct();
      l->t = sel0;
      l->title += wxChar(keyCode);

      int len = mLabels.Count();
      int pos = 0;

      while (pos < len && l->t > mLabels[pos]->t)
         pos++;

      mLabels.Insert(l, pos);

      mSelIndex = pos;
   }
}
Пример #3
0
void APalette::OnKeyEvent(wxKeyEvent & event)
{
   if (event.ControlDown()) {
      event.Skip();
      return;
   }

   long key = event.KeyCode();

   if (event.KeyCode() == WXK_SPACE) {
      if (gAudioIO->IsBusy()) {
         OnStop();
         SetPlay(false);
         SetStop(true);
      } else {
         OnPlay();
         SetPlay(true);
         SetStop(false);
      }
   }
}
Пример #4
0
void GLCanvas::OnKeyDown( wxKeyEvent& event )
{
	long evkey = event.KeyCode();
	if (evkey == 0) return;

	if (!m_TimeInitialized)
	{
		m_TimeInitialized = 1;
		m_xsynct = event.m_timeStamp;
		m_gsynct = wxStopWatch(&m_secbase);

		m_Key = evkey;
		m_StartTime = 0;
		m_LastTime = 0;
		m_LastRedraw = 0;
	}

	unsigned long currTime = event.m_timeStamp - m_xsynct;

	if (evkey != m_Key)
	{
		m_Key = evkey;
		m_LastRedraw = m_StartTime = m_LastTime = currTime;
	}

	if (currTime >= m_LastRedraw)      // Redraw:
	{
		Action( m_Key, m_LastTime-m_StartTime, currTime-m_StartTime );

#if defined(__WXMAC__) && !defined(__DARWIN__)
		m_LastRedraw = currTime;    // wxStopWatch() doesn't work on Mac...
#else
		m_LastRedraw = wxStopWatch(&m_secbase) - m_gsynct;
#endif
		m_LastTime = currTime;
	}

	event.Skip();
}
Пример #5
0
void AudioView::OnKeyDown(wxKeyEvent& keyEvent)
{
  if (keyEvent.KeyCode() == WXK_BACK ||
	  keyEvent.KeyCode() == WXK_DELETE)
	Clear();
}
Пример #6
0
/////////////
// Key press
void BaseGrid::OnKeyPress(wxKeyEvent &event) {
	// Get size
	int w,h;
	GetClientSize(&w,&h);

	// Get scan code
	int key = event.KeyCode();
	bool ctrl = event.m_controlDown;
	bool alt = event.m_altDown;
	bool shift = event.m_shiftDown;

	// Left/right, forward to seek bar if video is loaded
	if (key == WXK_LEFT || key == WXK_RIGHT) {
		if (video->loaded) {
			video->ControlSlider->SetFocus();
			video->ControlSlider->AddPendingEvent(event);
			return;
		}
		event.Skip();
		return;
	}

	// Select all
	if (key == 'A' && ctrl && !alt && !shift) {
		int rows = GetRows();
		for (int i=0;i<rows;i++) SelectRow(i,true);
	}

	// Up/down
	int dir = 0;
	int step = 1;
	if (key == WXK_UP) dir = -1;
	if (key == WXK_DOWN) dir = 1;
	if (key == WXK_PRIOR) {
		dir = -1;
		step = h/lineHeight - 2;
	}
	if (key == WXK_NEXT) {
		dir = 1;
		step = h/lineHeight - 2;
	}
	if (key == WXK_HOME) {
		dir = -1;
		step = GetRows();
	}
	if (key == WXK_END) {
		dir = 1;
		step = GetRows();
	}

	// Moving
	if (dir) {
		// Move selection
		if (!ctrl && !shift && !alt) {
			// Move to extent first
			int curLine = editBox->linen;
			if (extendRow != -1) {
				curLine = extendRow;
				extendRow = -1;
			}

			int next = MID(0,curLine+dir*step,GetRows()-1);
			editBox->SetToLine(next);
			SelectRow(next);
			MakeCellVisible(next,0,false);
			return;
		}

		// Move active only
		if (alt && !shift && !ctrl) {
			extendRow = -1;
			int next = MID(0,editBox->linen+dir*step,GetRows()-1);
			editBox->SetToLine(next);
			Refresh(false);
			MakeCellVisible(next,0,false);
			return;
		}

		// Shift-selection
		if (shift && !ctrl && !alt) {
			// Find end
			if (extendRow == -1) extendRow = editBox->linen;
			extendRow = MID(0,extendRow+dir*step,GetRows()-1);

			// Set range
			int i1 = editBox->linen;
			int i2 = extendRow;
			if (i2 < i1) {
				int aux = i1;
				i1 = i2;
				i2 = aux;
			}

			// Select range
			ClearSelection();
			for (int i=i1;i<=i2;i++) {
				SelectRow(i,true);
			}

			MakeCellVisible(extendRow,0,false);
			return;
		}
	}

	// Other events, send to audio display
	if (video->audio->loaded) {
		video->audio->AddPendingEvent(event);
	}
	else event.Skip();
}
Пример #7
0
void LabelTrack::KeyEvent(double sel0, double sel1, wxKeyEvent & event)
{
#ifdef __WXMAC__
   // HACK: why does each key event happen twice on wxMac?
   gMacRepeat = !gMacRepeat;
   if (gMacRepeat)
      return;
#endif

   long keyCode = event.KeyCode();

   if (mSelIndex >= 0) {
      switch (keyCode) {
      case WXK_BACK:{
            int len = mLabels[mSelIndex]->title.Length();
            if (len > 0)
               mLabels[mSelIndex]->title =
                   mLabels[mSelIndex]->title.Left(len - 1);
         }
         break;

      case WXK_RETURN:
      case WXK_ESCAPE:
         if (mLabels[mSelIndex]->title == "") {
            delete mLabels[mSelIndex];
            mLabels.RemoveAt(mSelIndex);
         }
         mSelIndex = -1;
         break;

      case WXK_TAB:
         if (event.ShiftDown()) {
            if (mSelIndex > 0)
               mSelIndex--;
         } else {
            if (mSelIndex < (int)mLabels.Count() - 1)
               mSelIndex++;
         }
         break;

      default:
         mLabels[mSelIndex]->title += keyCode;
         break;
      }
   } else {
      // Create new label

      LabelStruct *l = new LabelStruct();
      l->t = sel0;
      l->t1 = sel1;
      l->title += wxChar(keyCode);

      int len = mLabels.Count();
      int pos = 0;

      while (pos < len && l->t > mLabels[pos]->t)
         pos++;

      mLabels.Insert(l, pos);

      mSelIndex = pos;
   }
}
Пример #8
0
void ControlToolBar::OnKeyEvent(wxKeyEvent & event)
{
   if (event.ControlDown() || event.AltDown()) {
      event.Skip();
      return;
   }

   // Play/Stop
#if (AUDACITY_BRANDING == BRAND_AUDIOTOUCH)
   if (event.GetKeyCode() == WXK_RETURN) {
#else
   if (event.KeyCode() == WXK_SPACE) {
#endif
      if (gAudioIO->IsStreamActive(GetActiveProject()->GetAudioIOToken())) {
         SetPlay(false);
         SetStop(true);
         StopPlaying();
      }
      else if (!gAudioIO->IsBusy()) {
         SetPlay(true);
         SetStop(false);
         PlayCurrentRegion();
      }
      return;
   }
   event.Skip();
}

//void ControlToolBar::OnKeyUp(wxKeyEvent & event)
//{
//   #if (AUDACITY_BRANDING == BRAND_AUDIOTOUCH)
//      if ((event.KeyCode() == WXK_SPACE) && // Record
//            !mIsLocked)
//      {
//         StopPlaying();
//
//         SetPlay(false);
//         SetRecord(false);
//         SetStop(true);
//         mStop->Disable();
//      }
//   #endif
//   event.Skip();
//}
//
void ControlToolBar::UpdatePrefs()
{
	gPrefs->Read("/GUI/AlwaysEnablePlay", &mAlwaysEnablePlay, false);
#if 0
   gPrefs->Read("/GUI/AlwaysEnablePause", &mAlwaysEnablePause, false);

   if(mAlwaysEnablePause)
   {
      mPause->Enable();
      this->EnablePauseCommand(true);
   }
   else if(!mAlwaysEnablePause && !gAudioIO->IsBusy())
   {
      mPause->PopUp();
      mPause->Disable();
      this->EnablePauseCommand(false);

      mPaused = false;
      gAudioIO->SetPaused(false);
   }

   gAudioIO->SetAlwaysEnablePause(mAlwaysEnablePause);
#endif
}