//! [6] void MusicPlayer::createThumbnailToolBar() { thumbnailToolBar = new QWinThumbnailToolBar(this); thumbnailToolBar->setWindow(windowHandle()); playToolButton = new QWinThumbnailToolButton(thumbnailToolBar); playToolButton->setEnabled(false); playToolButton->setToolTip(tr("Play")); playToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); connect(playToolButton, SIGNAL(clicked()), this, SLOT(togglePlayback())); forwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar); forwardToolButton->setEnabled(false); forwardToolButton->setToolTip(tr("Fast forward")); forwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekForward)); connect(forwardToolButton, SIGNAL(clicked()), this, SLOT(seekForward())); backwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar); backwardToolButton->setEnabled(false); backwardToolButton->setToolTip(tr("Rewind")); backwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekBackward)); connect(backwardToolButton, SIGNAL(clicked()), this, SLOT(seekBackward())); thumbnailToolBar->addButton(backwardToolButton); thumbnailToolBar->addButton(playToolButton); thumbnailToolBar->addButton(forwardToolButton); connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(updateThumbnailToolBar())); connect(&mediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(updateThumbnailToolBar())); connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(updateThumbnailToolBar())); }
void MusicPlayer::createShortcuts() { QShortcut *quitShortcut = new QShortcut(QKeySequence::Quit, this); connect(quitShortcut, SIGNAL(activated()), qApp, SLOT(quit())); /* QShortcut *openShortcut = new QShortcut(QKeySequence::Open, this); connect(openShortcut, SIGNAL(activated()), this, SLOT(openFile())); */ QShortcut *toggleShortcut = new QShortcut(Qt::Key_Space, this); connect(toggleShortcut, SIGNAL(activated()), this, SLOT(togglePlayback())); QShortcut *forwardShortcut = new QShortcut(Qt::Key_Right, this); connect(forwardShortcut, SIGNAL(activated()), this, SLOT(seekForward())); QShortcut *backwardShortcut = new QShortcut(Qt::Key_Left, this); connect(backwardShortcut, SIGNAL(activated()), this, SLOT(seekBackward())); QShortcut *increaseShortcut = new QShortcut(Qt::Key_Up, this); connect(increaseShortcut, SIGNAL(activated()), volumeButton, SLOT(increaseVolume())); QShortcut *decreaseShortcut = new QShortcut(Qt::Key_Down, this); connect(decreaseShortcut, SIGNAL(activated()), volumeButton, SLOT(descreaseVolume())); }
ControlPanel::ControlPanel(QWidget *parent) : QWidget(parent), m_coverArt(new CoverArtDialog(this)), m_lyricsDialog(new LyricsDialog(this)), m_lastFm(new LastFmSubmitter(this)) { Q_ASSERT(m_coverArt); Q_ASSERT(m_lyricsDialog); Q_ASSERT(m_lastFm); setupUi(this); coverArtButton->setVisible(false); connect(prevButton, SIGNAL(clicked()), MPD::instance(), SLOT(prev())); connect(playButton, SIGNAL(clicked()), MPD::instance(), SLOT(play())); connect(pauseButton, SIGNAL(clicked()), MPD::instance(), SLOT(pause())); connect(stopButton, SIGNAL(clicked()), MPD::instance(), SLOT(stop())); connect(nextButton, SIGNAL(clicked()), MPD::instance(), SLOT(next())); connect(volumeSlider, SIGNAL(valueChanged(int)), MPD::instance(), SLOT(setVolume(int))); connect(timeSlider, SIGNAL(timeChanged(int)), MPD::instance(), SLOT(seek(int))); connect(timeSlider, SIGNAL(valueChanged(int)), elapsedLabel, SLOT(setTime(int))); connect(MPD::instance(), SIGNAL(volumeUpdated(int)), volumeSlider, SLOT(setValue(int))); connect(MPD::instance(), SIGNAL(timeUpdated(int, int)), elapsedLabel, SLOT(setTime(int, int))); connect(MPD::instance(), SIGNAL(timeUpdated(int, int)), totalLabel, SLOT(setTime(int, int))); connect(MPD::instance(), SIGNAL(timeUpdated(int, int)), timeSlider, SLOT(setTime(int, int))); connect(MPD::instance(), SIGNAL(playingSongUpdated(const MPDSong &)), this, SLOT(setSong(const MPDSong &))); connect(Config::instance(), SIGNAL(showCoverArtChanged(bool)), this, SLOT(showCoverArtChanged(bool))); connect(coverArtButton, SIGNAL(clicked()), m_coverArt, SLOT(show())); connect(lyricsButton, SIGNAL(clicked()), m_lyricsDialog, SLOT(show())); connect(m_lastFm, SIGNAL(infoMsg(QString)), this, SIGNAL(infoMsg(QString))); connect(scrobbleCheckBox, SIGNAL(toggled(bool)), Config::instance(), SLOT(setSubmitSongsToLastFm(bool))); connect(Config::instance(), SIGNAL(submitSongsToLastFmChanged(bool)), scrobbleCheckBox, SLOT(setChecked(bool))); scrobbleCheckBox->setChecked(Config::instance()->submitSongsToLastFm()); // Short cuts m_fwdKey = new QShortcut(Qt::CTRL | Qt::Key_Right, this); m_rwdKey = new QShortcut(Qt::CTRL | Qt::Key_Left, this); m_volUpKey = new QShortcut(Qt::CTRL | Qt::Key_Up, this); m_volDnKey = new QShortcut(Qt::CTRL | Qt::Key_Down, this); m_stopMultKey = new QShortcut(Qt::Key_MediaStop, this); m_togglePlayMultKey = new QShortcut(Qt::Key_MediaPlay, this); m_fwdMultKey = new QShortcut(Qt::Key_MediaNext, this); m_rwdMultKey = new QShortcut(Qt::Key_MediaPrevious, this); m_fwdKey->setObjectName("nextSongKey"); m_rwdKey->setObjectName("prevSongKey"); m_volUpKey->setObjectName("volumeUpKey"); m_volDnKey->setObjectName("volumeDownKey"); m_stopMultKey->setObjectName("stopKey"); m_togglePlayMultKey->setObjectName("togglePlayKey"); m_fwdMultKey->setObjectName("nextSongMultimediaKey"); m_rwdMultKey->setObjectName("prevSongMultimediaKey"); connect(m_fwdKey, SIGNAL(activated()), MPD::instance(), SLOT(seekForward())); connect(m_rwdKey, SIGNAL(activated()), MPD::instance(), SLOT(seekBackward())); connect(m_volUpKey, SIGNAL(activated()), MPD::instance(), SLOT(volumeUp())); connect(m_volDnKey, SIGNAL(activated()), MPD::instance(), SLOT(volumeDown())); connect(m_stopMultKey, SIGNAL(activated()), MPD::instance(), SLOT(stop())); connect(m_togglePlayMultKey, SIGNAL(activated()), MPD::instance(), SLOT(togglePlay())); connect(m_fwdMultKey, SIGNAL(activated()), MPD::instance(), SLOT(next())); connect(m_rwdMultKey, SIGNAL(activated()), MPD::instance(), SLOT(prev())); setSong(MPDSong()); }
bool ThumbFinder::keyPressEvent(QKeyEvent *event) { if (GetFocusWidget()->keyPressEvent(event)) return true; QStringList actions; bool handled = GetMythMainWindow()->TranslateKeyPress("Archive", event, actions); for (int i = 0; i < actions.size() && !handled; i++) { QString action = actions[i]; handled = true; if (action == "MENU") { NextPrevWidgetFocus(true); return true; } if (action == "ESCAPE") { ShowMenu(); return true; } if (action == "0" || action == "1" || action == "2" || action == "3" || action == "4" || action == "5" || action == "6" || action == "7" || action == "8" || action == "9") { m_imageGrid->SetItemCurrent(action.toInt()); int itemNo = m_imageGrid->GetCurrentPos(); ThumbImage *thumb = m_thumbList.at(itemNo); if (thumb) seekToFrame(thumb->frame); return true; } if (GetFocusWidget() == m_frameButton) { if (action == "UP") { changeSeekAmount(true); } else if (action == "DOWN") { changeSeekAmount(false); } else if (action == "LEFT") { seekBackward(); } else if (action == "RIGHT") { seekForward(); } else if (action == "SELECT") { updateThumb(); } else handled = false; } else handled = false; } if (!handled && MythScreenType::keyPressEvent(event)) handled = true; return handled; }
static int midimain(const void * filename) { int a, notes_used, vol; bool is_playing = true; /* false = paused */ #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(true); #endif midi_debug("Loading file"); mf = loadFile(filename); if (mf == NULL) { midi_debug("Error loading file."); #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(false); #endif return -1; } if (initSynth(mf, ROCKBOX_DIR "/patchset/patchset.cfg", ROCKBOX_DIR "/patchset/drums.cfg") == -1) { #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(false); #endif return -1; } rb->pcm_play_stop(); #if INPUT_SRC_CAPS != 0 /* Select playback */ rb->audio_set_input_source(AUDIO_SRC_PLAYBACK, SRCF_PLAYBACK); rb->audio_set_output_source(AUDIO_SRC_PLAYBACK); #endif rb->pcm_set_frequency(SAMPLE_RATE); /* 44100 22050 11025 */ /* * tick() will do one MIDI clock tick. Then, there's a loop here that * will generate the right number of samples per MIDI tick. The whole * MIDI playback is timed in terms of this value.. there are no forced * delays or anything. It just produces enough samples for each tick, and * the playback of these samples is what makes the timings right. * * This seems to work quite well. On a laptop, anyway. */ midi_debug("Okay, starting sequencing"); bpm = mf->div*1000000/tempo; number_of_samples = SAMPLE_RATE/bpm; /* Skip over any junk in the beginning of the file, so start playing */ /* after the first note event */ do { notes_used = 0; for (a = 0; a < MAX_VOICES; a++) if (voices[a].isUsed) notes_used++; tick(); } while (notes_used == 0); #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(false); #endif playing_time = 0; samples_this_second = 0; synthbuf(); rb->pcm_play_data(&get_more, NULL, NULL, 0); while (!quit) { #ifndef SYNC synthbuf(); #endif rb->yield(); /* Prevent idle poweroff */ rb->reset_poweroff_timer(); /* Code taken from Oscilloscope plugin */ switch (rb->button_get(false)) { case MIDI_VOL_UP: case MIDI_VOL_UP | BUTTON_REPEAT: { vol = rb->global_settings->volume; if (vol < rb->sound_max(SOUND_VOLUME)) { vol++; rb->sound_set(SOUND_VOLUME, vol); rb->global_settings->volume = vol; } break; } case MIDI_VOL_DOWN: case MIDI_VOL_DOWN | BUTTON_REPEAT: { vol = rb->global_settings->volume; if (vol > rb->sound_min(SOUND_VOLUME)) { vol--; rb->sound_set(SOUND_VOLUME, vol); rb->global_settings->volume = vol; } break; } case MIDI_REWIND: { /* Rewinding is tricky. Basically start the file over */ /* but run through the tracks without the synth running */ rb->pcm_play_stop(); #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(true); #endif seekBackward(5); #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(false); #endif lastswap = !swap; synthbuf(); midi_debug("Rewind to %d:%02d\n", playing_time/60, playing_time%60); if (is_playing) rb->pcm_play_data(&get_more, NULL, NULL, 0); break; } case MIDI_FFWD: { rb->pcm_play_stop(); seekForward(5); lastswap = !swap; synthbuf(); midi_debug("Skip to %d:%02d\n", playing_time/60, playing_time%60); if (is_playing) rb->pcm_play_data(&get_more, NULL, NULL, 0); break; } case MIDI_PLAYPAUSE: { if (is_playing) { midi_debug("Paused at %d:%02d\n", playing_time/60, playing_time%60); is_playing = false; rb->pcm_play_stop(); } else { midi_debug("Playing from %d:%02d\n", playing_time/60, playing_time%60); is_playing = true; rb->pcm_play_data(&get_more, NULL, NULL, 0); } break; } #ifdef MIDI_RC_QUIT case MIDI_RC_QUIT: #endif case MIDI_QUIT: quit = true; } } return 0; }
TITANIUM_FUNCTION(MusicPlayer, seekBackward) { seekBackward(); return get_context().CreateUndefined(); }