Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ See [BUILDING.md](BUILDING.md)
* Cmd/Ctrl-M: change *m*onitor
* Cmd/Ctrl-F: toggle *f*ull screen
* Mouse Scroll Up / Down: next or previous preset (hard transition)
* Return: search for preset (RETURN or ESCAPE to exit search)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe / too, vim-style?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started with this but gave up because of how SDL_StartTextInput will still grab the / key. I am likely missing something, but this could be a wish list.

* Space: lock current preset


Expand Down
111 changes: 76 additions & 35 deletions src/libprojectM/KeyHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,25 +120,39 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
switch (keycode)
{
case PROJECTM_K_HOME:
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
selectPreset(0); // jump to top of presets.
if (renderer->showmenu) {
if (!isTextInputActive()) {
selectPreset(0); // jump to top of presets.
}
else {
renderer->m_activePresetID = 1; // jump to top of search results.
selectPresetByName(renderer->m_presetList[0].name,true);
}
}
break;
case PROJECTM_K_END:
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
selectPreset(m_presetLoader->size() - 1); // jump to bottom of presets.
if (renderer->showmenu) {
if (!isTextInputActive()) {
selectPreset(m_presetLoader->size() - 1); // jump to bottom of presets.
}
else {
renderer->m_activePresetID = renderer->m_presetList.size(); // jump to top of search results.
selectPresetByName(renderer->m_presetList[renderer->m_activePresetID - 1].name,true);
}
}
break;
case PROJECTM_K_PAGEUP:
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
if (isTextInputActive()) break; // don't handle this key if search menu is up.
if (renderer->showmenu) {
int upPreset = m_presetPos->lastIndex() - (renderer->textMenuPageSize / 2.0f); // jump up by page size / 2
if (upPreset < 0) // handle lower boundary
upPreset = m_presetLoader->size() - 1;
selectPreset(upPreset); // jump up menu half a page.
}
break;
case PROJECTM_K_PAGEDOWN:
if (renderer->showmenu) { // pagedown only does something when the preset menu is active.
if (isTextInputActive()) break; // don't handle this key if search menu is up.
if (renderer->showmenu) {
int downPreset = m_presetPos->lastIndex() + (renderer->textMenuPageSize / 2.0f); // jump down by page size / 2
if (downPreset >= (m_presetLoader->size() - 1)) // handle upper boundary
downPreset = 0;
Expand Down Expand Up @@ -166,15 +180,19 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
}
break;
case PROJECTM_K_h:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showhelp = !renderer->showhelp;
renderer->showstats = false;
renderer->showmenu = false;
break;
case PROJECTM_K_F1:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showhelp = !renderer->showhelp;
renderer->showstats = false;
renderer->showmenu = false;
break;
case PROJECTM_K_y:
if (isTextInputActive(true)) break; // disable when searching.
this->setShuffleEnabled(!this->isShuffleEnabled());
if (this->isShuffleEnabled()) {
renderer->setToastMessage("Shuffle Enabled");
Expand All @@ -183,8 +201,8 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
renderer->setToastMessage("Shuffle Disabled");
}
break;

case PROJECTM_K_F5:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showfps = !renderer->showfps;
// Initialize counters and reset frame count.
renderer->lastTimeFPS = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
Expand All @@ -197,13 +215,15 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
}
break;
case PROJECTM_K_F4:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showstats = !renderer->showstats;
if (renderer->showstats) {
renderer->showhelp = false;
renderer->showmenu = false;
}
break;
case PROJECTM_K_F3: {
if (isTextInputActive(true)) break; // disable when searching.
renderer->showpreset = !renderer->showpreset;
// Hide FPS from screen and replace it with preset name.
if (renderer->showpreset)
Expand All @@ -225,7 +245,9 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
break;

case PROJECTM_K_ESCAPE: {
// exit( 1 );
renderer->showsearch = false; // hide input menu
setShuffleEnabled(renderer->shuffletrack); // restore shuffle
renderer->showmenu = false; // hide input
break;
}
case PROJECTM_K_f:
Expand All @@ -238,6 +260,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
break;
case PROJECTM_K_H:
case PROJECTM_K_m:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showmenu = !renderer->showmenu;
if (renderer->showmenu) {
renderer->showhelp = false;
Expand All @@ -246,53 +269,71 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
}
break;
case PROJECTM_K_M:
if (isTextInputActive(true)) break; // disable when searching.
renderer->showmenu = !renderer->showmenu;
if (renderer->showmenu)
{
renderer->showhelp=false;
renderer->showstats=false;
renderer->showhelp = false;
renderer->showstats = false;
populatePresetMenu();
}
break;
break;
case PROJECTM_K_n:
selectNext(true);
break;
if (isTextInputActive(true)) break; // disable when searching.
selectNext(true);
break;
case PROJECTM_K_N:
selectNext(false);
break;
if (isTextInputActive(true)) break; // disable when searching.
selectNext(false);
break;
case PROJECTM_K_r:
selectRandom(true);
break;
if (isTextInputActive(true)) break; // disable when searching.
selectRandom(true);
break;
case PROJECTM_K_R:
selectRandom(false);
break;
if (isTextInputActive(true)) break; // disable when searching.
selectRandom(false);
break;
case PROJECTM_K_p:
selectPrevious(true);
break;
selectPrevious(true);
break;
case PROJECTM_K_P:
case PROJECTM_K_BACKSPACE:
selectPrevious(false);
break;
selectPrevious(false);
break;
case PROJECTM_K_l:
setPresetLock(!isPresetLocked());
break;
if (isTextInputActive(true)) break; // disable when searching.
setPresetLock(!isPresetLocked());
break;
case PROJECTM_K_s:
renderer->studio = !renderer->studio;
renderer->studio = !renderer->studio;
case PROJECTM_K_i:
break;
case PROJECTM_K_z:
break;
case PROJECTM_K_RETURN:
renderer->toggleSearchText();
if (renderer->showsearch) {
renderer->shuffletrack = this->isShuffleEnabled(); // track previous shuffle state.
setShuffleEnabled(false); // disable shuffle
renderer->showhelp = false;
renderer->showstats = false;
renderer->showmenu = true;
populatePresetMenu();
} else {
setShuffleEnabled(renderer->shuffletrack); // restore shuffle
renderer->showmenu = false;
}
break;
case PROJECTM_K_0:
// nWaveMode=0;
break;
// nWaveMode=0;
break;
case PROJECTM_K_6:
// nWaveMode=6;
break;
// nWaveMode=6;
break;
case PROJECTM_K_7:
// nWaveMode=7;
break;
// nWaveMode=7;
break;
case PROJECTM_K_t:
break;
break;
case PROJECTM_K_EQUALS:
case PROJECTM_K_PLUS:

Expand Down
13 changes: 13 additions & 0 deletions src/libprojectM/PresetLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,19 @@ const std::string & PresetLoader::getPresetName ( PresetIndex index ) const
return _presetNames[index];
}


// Get vector of preset names
const std::vector<std::string> &PresetLoader::getPresetNames() const
{
return _presetNames;
}

// Get the preset index given a name
const unsigned int PresetLoader::getPresetIndex(std::string &name) const
{
return find(_presetNames.begin(), _presetNames.end(), name) - _presetNames.begin();
}

int PresetLoader::getPresetRating ( PresetIndex index, const PresetRatingType ratingType ) const
{
return _ratings[ratingType][index];
Expand Down
6 changes: 6 additions & 0 deletions src/libprojectM/PresetLoader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ class PresetLoader {
/// Get a preset name given an index
const std::string & getPresetName ( PresetIndex index) const;

/// Get vector of preset names
const std::vector<std::string> & getPresetNames() const;

/// Get the preset index given a name
const unsigned int getPresetIndex(std::string &name) const;

/// Returns the number of presets in the active directory
inline std::size_t size() const {
return _entries.size();
Expand Down
Loading