Skip to content

Commit be446c4

Browse files
authored
Merge pull request #405 from milkdropper/search
Search menu
2 parents e5dcd8d + adf273c commit be446c4

File tree

11 files changed

+500
-203
lines changed

11 files changed

+500
-203
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ See [BUILDING.md](BUILDING.md)
103103
* Cmd/Ctrl-M: change *m*onitor
104104
* Cmd/Ctrl-F: toggle *f*ull screen
105105
* Mouse Scroll Up / Down: next or previous preset (hard transition)
106+
* Return: search for preset (RETURN or ESCAPE to exit search)
106107
* Space: lock current preset
107108

108109

src/libprojectM/KeyHandler.cpp

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -120,25 +120,39 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
120120
switch (keycode)
121121
{
122122
case PROJECTM_K_HOME:
123-
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
124-
selectPreset(0); // jump to top of presets.
123+
if (renderer->showmenu) {
124+
if (!isTextInputActive()) {
125+
selectPreset(0); // jump to top of presets.
126+
}
127+
else {
128+
renderer->m_activePresetID = 1; // jump to top of search results.
129+
selectPresetByName(renderer->m_presetList[0].name,true);
130+
}
125131
}
126132
break;
127133
case PROJECTM_K_END:
128-
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
129-
selectPreset(m_presetLoader->size() - 1); // jump to bottom of presets.
134+
if (renderer->showmenu) {
135+
if (!isTextInputActive()) {
136+
selectPreset(m_presetLoader->size() - 1); // jump to bottom of presets.
137+
}
138+
else {
139+
renderer->m_activePresetID = renderer->m_presetList.size(); // jump to top of search results.
140+
selectPresetByName(renderer->m_presetList[renderer->m_activePresetID - 1].name,true);
141+
}
130142
}
131143
break;
132144
case PROJECTM_K_PAGEUP:
133-
if (renderer->showmenu) { // pageup only does something when the preset menu is active.
145+
if (isTextInputActive()) break; // don't handle this key if search menu is up.
146+
if (renderer->showmenu) {
134147
int upPreset = m_presetPos->lastIndex() - (renderer->textMenuPageSize / 2.0f); // jump up by page size / 2
135148
if (upPreset < 0) // handle lower boundary
136149
upPreset = m_presetLoader->size() - 1;
137150
selectPreset(upPreset); // jump up menu half a page.
138151
}
139152
break;
140153
case PROJECTM_K_PAGEDOWN:
141-
if (renderer->showmenu) { // pagedown only does something when the preset menu is active.
154+
if (isTextInputActive()) break; // don't handle this key if search menu is up.
155+
if (renderer->showmenu) {
142156
int downPreset = m_presetPos->lastIndex() + (renderer->textMenuPageSize / 2.0f); // jump down by page size / 2
143157
if (downPreset >= (m_presetLoader->size() - 1)) // handle upper boundary
144158
downPreset = 0;
@@ -166,15 +180,19 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
166180
}
167181
break;
168182
case PROJECTM_K_h:
183+
if (isTextInputActive(true)) break; // disable when searching.
169184
renderer->showhelp = !renderer->showhelp;
170185
renderer->showstats = false;
171186
renderer->showmenu = false;
187+
break;
172188
case PROJECTM_K_F1:
189+
if (isTextInputActive(true)) break; // disable when searching.
173190
renderer->showhelp = !renderer->showhelp;
174191
renderer->showstats = false;
175192
renderer->showmenu = false;
176193
break;
177194
case PROJECTM_K_y:
195+
if (isTextInputActive(true)) break; // disable when searching.
178196
this->setShuffleEnabled(!this->isShuffleEnabled());
179197
if (this->isShuffleEnabled()) {
180198
renderer->setToastMessage("Shuffle Enabled");
@@ -183,8 +201,8 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
183201
renderer->setToastMessage("Shuffle Disabled");
184202
}
185203
break;
186-
187204
case PROJECTM_K_F5:
205+
if (isTextInputActive(true)) break; // disable when searching.
188206
renderer->showfps = !renderer->showfps;
189207
// Initialize counters and reset frame count.
190208
renderer->lastTimeFPS = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
@@ -197,13 +215,15 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
197215
}
198216
break;
199217
case PROJECTM_K_F4:
218+
if (isTextInputActive(true)) break; // disable when searching.
200219
renderer->showstats = !renderer->showstats;
201220
if (renderer->showstats) {
202221
renderer->showhelp = false;
203222
renderer->showmenu = false;
204223
}
205224
break;
206225
case PROJECTM_K_F3: {
226+
if (isTextInputActive(true)) break; // disable when searching.
207227
renderer->showpreset = !renderer->showpreset;
208228
// Hide FPS from screen and replace it with preset name.
209229
if (renderer->showpreset)
@@ -225,7 +245,9 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
225245
break;
226246

227247
case PROJECTM_K_ESCAPE: {
228-
// exit( 1 );
248+
renderer->showsearch = false; // hide input menu
249+
setShuffleEnabled(renderer->shuffletrack); // restore shuffle
250+
renderer->showmenu = false; // hide input
229251
break;
230252
}
231253
case PROJECTM_K_f:
@@ -238,6 +260,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
238260
break;
239261
case PROJECTM_K_H:
240262
case PROJECTM_K_m:
263+
if (isTextInputActive(true)) break; // disable when searching.
241264
renderer->showmenu = !renderer->showmenu;
242265
if (renderer->showmenu) {
243266
renderer->showhelp = false;
@@ -246,53 +269,71 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
246269
}
247270
break;
248271
case PROJECTM_K_M:
272+
if (isTextInputActive(true)) break; // disable when searching.
249273
renderer->showmenu = !renderer->showmenu;
250274
if (renderer->showmenu)
251275
{
252-
renderer->showhelp=false;
253-
renderer->showstats=false;
276+
renderer->showhelp = false;
277+
renderer->showstats = false;
254278
populatePresetMenu();
255279
}
256-
break;
280+
break;
257281
case PROJECTM_K_n:
258-
selectNext(true);
259-
break;
282+
if (isTextInputActive(true)) break; // disable when searching.
283+
selectNext(true);
284+
break;
260285
case PROJECTM_K_N:
261-
selectNext(false);
262-
break;
286+
if (isTextInputActive(true)) break; // disable when searching.
287+
selectNext(false);
288+
break;
263289
case PROJECTM_K_r:
264-
selectRandom(true);
265-
break;
290+
if (isTextInputActive(true)) break; // disable when searching.
291+
selectRandom(true);
292+
break;
266293
case PROJECTM_K_R:
267-
selectRandom(false);
268-
break;
294+
if (isTextInputActive(true)) break; // disable when searching.
295+
selectRandom(false);
296+
break;
269297
case PROJECTM_K_p:
270-
selectPrevious(true);
271-
break;
298+
selectPrevious(true);
299+
break;
272300
case PROJECTM_K_P:
273301
case PROJECTM_K_BACKSPACE:
274-
selectPrevious(false);
275-
break;
302+
selectPrevious(false);
303+
break;
276304
case PROJECTM_K_l:
277-
setPresetLock(!isPresetLocked());
278-
break;
305+
if (isTextInputActive(true)) break; // disable when searching.
306+
setPresetLock(!isPresetLocked());
307+
break;
279308
case PROJECTM_K_s:
280-
renderer->studio = !renderer->studio;
309+
renderer->studio = !renderer->studio;
281310
case PROJECTM_K_i:
282311
break;
283-
case PROJECTM_K_z:
284-
break;
312+
case PROJECTM_K_RETURN:
313+
renderer->toggleSearchText();
314+
if (renderer->showsearch) {
315+
renderer->shuffletrack = this->isShuffleEnabled(); // track previous shuffle state.
316+
setShuffleEnabled(false); // disable shuffle
317+
renderer->showhelp = false;
318+
renderer->showstats = false;
319+
renderer->showmenu = true;
320+
populatePresetMenu();
321+
} else {
322+
setShuffleEnabled(renderer->shuffletrack); // restore shuffle
323+
renderer->showmenu = false;
324+
}
325+
break;
285326
case PROJECTM_K_0:
286-
// nWaveMode=0;
287-
break;
327+
// nWaveMode=0;
328+
break;
288329
case PROJECTM_K_6:
289-
// nWaveMode=6;
290-
break;
330+
// nWaveMode=6;
331+
break;
291332
case PROJECTM_K_7:
292-
// nWaveMode=7;
293-
break;
333+
// nWaveMode=7;
334+
break;
294335
case PROJECTM_K_t:
295-
break;
336+
break;
296337
case PROJECTM_K_EQUALS:
297338
case PROJECTM_K_PLUS:
298339

src/libprojectM/PresetLoader.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,19 @@ const std::string & PresetLoader::getPresetName ( PresetIndex index ) const
149149
return _presetNames[index];
150150
}
151151

152+
153+
// Get vector of preset names
154+
const std::vector<std::string> &PresetLoader::getPresetNames() const
155+
{
156+
return _presetNames;
157+
}
158+
159+
// Get the preset index given a name
160+
const unsigned int PresetLoader::getPresetIndex(std::string &name) const
161+
{
162+
return find(_presetNames.begin(), _presetNames.end(), name) - _presetNames.begin();
163+
}
164+
152165
int PresetLoader::getPresetRating ( PresetIndex index, const PresetRatingType ratingType ) const
153166
{
154167
return _ratings[ratingType][index];

src/libprojectM/PresetLoader.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class PresetLoader {
7070
/// Get a preset name given an index
7171
const std::string & getPresetName ( PresetIndex index) const;
7272

73+
/// Get vector of preset names
74+
const std::vector<std::string> & getPresetNames() const;
75+
76+
/// Get the preset index given a name
77+
const unsigned int getPresetIndex(std::string &name) const;
78+
7379
/// Returns the number of presets in the active directory
7480
inline std::size_t size() const {
7581
return _entries.size();

0 commit comments

Comments
 (0)