diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 2 | ||||
| -rw-r--r-- | src/ui.c | 10 | ||||
| -rw-r--r-- | src/ui.h | 4 | ||||
| -rw-r--r-- | src/ui_act.c | 44 | 
4 files changed, 54 insertions, 6 deletions
| @@ -136,7 +136,7 @@ static void BarMainGetInitialStation (BarApp_t *app) {  	}  	/* no autostart? ask the user */  	if (app->curStation == NULL) { -		app->curStation = BarUiSelectStation (app, "Select station: "); +		app->curStation = BarUiSelectStation (app, "Select station: ", NULL);  	}  	if (app->curStation != NULL) {  		BarUiPrintStation (&app->settings, app->curStation); @@ -330,9 +330,11 @@ static PianoStation_t **BarSortedStations (PianoStation_t *unsortedStations,  /*	let user pick one station   *	@param app handle   *	@param prompt string + *	@param called if input was not a number   *	@return pointer to selected station or NULL   */ -PianoStation_t *BarUiSelectStation (BarApp_t *app, const char *prompt) { +PianoStation_t *BarUiSelectStation (BarApp_t *app, const char *prompt, +		BarUiSelectStationCallback_t callback) {  	PianoStation_t **sortedStations = NULL, *retStation = NULL;  	size_t stationCount, i;  	char buf[100]; @@ -351,6 +353,7 @@ PianoStation_t *BarUiSelectStation (BarApp_t *app, const char *prompt) {  	do {  		for (i = 0; i < stationCount; i++) {  			const PianoStation_t *currStation = sortedStations[i]; +			/* filter stations */  			if (BarStrCaseStr (currStation->name, buf) != NULL) {  				BarUiMsg (&app->settings, MSG_LIST, "%2i) %c%c%c %s\n", i,  						currStation->useQuickMix ? 'q' : ' ', @@ -373,6 +376,11 @@ PianoStation_t *BarUiSelectStation (BarApp_t *app, const char *prompt) {  				retStation = sortedStations[selected];  			}  		} + +		/* hand over buffer to external function if it was not a station number */ +		if (retStation == NULL && callback != NULL) { +			callback (app, buf); +		}  	} while (retStation == NULL);  	free (sortedStations); @@ -33,8 +33,10 @@ THE SOFTWARE.  #include "ui_readline.h"  #include "ui_types.h" +typedef void (*BarUiSelectStationCallback_t) (BarApp_t *app, char *buf); +  void BarUiMsg (const BarSettings_t *, const BarUiMsg_t, const char *, ...); -PianoStation_t *BarUiSelectStation (BarApp_t *, const char *); +PianoStation_t *BarUiSelectStation (BarApp_t *, const char *, BarUiSelectStationCallback_t);  PianoSong_t *BarUiSelectSong (const BarSettings_t *, PianoSong_t *,  		BarReadlineFds_t *);  PianoArtist_t *BarUiSelectArtist (BarApp_t *, PianoArtist_t *); diff --git a/src/ui_act.c b/src/ui_act.c index 22ca2da..08cd6e2 100644 --- a/src/ui_act.c +++ b/src/ui_act.c @@ -317,7 +317,7 @@ BarUiActCallback(BarUiActMoveSong) {  	reqData.step = 0; -	reqData.to = BarUiSelectStation (app, "Move song to station: "); +	reqData.to = BarUiSelectStation (app, "Move song to station: ", NULL);  	if (reqData.to != NULL) {  		/* find original station (just is case we're playing a quickmix  		 * station) */ @@ -379,7 +379,8 @@ BarUiActCallback(BarUiActRenameStation) {  /*	play another station   */  BarUiActCallback(BarUiActSelectStation) { -	PianoStation_t *newStation = BarUiSelectStation (app, "Select station: "); +	PianoStation_t *newStation = BarUiSelectStation (app, "Select station: ", +			NULL);  	if (newStation != NULL) {  		app->curStation = newStation;  		BarUiPrintStation (&app->settings, app->curStation); @@ -421,6 +422,42 @@ BarUiActCallback(BarUiActPrintUpcoming) {  	}  } +/*	selectStation callback used by BarUiActSelectQuickMix; toggle, select + *	all/none + */ +static void BarUiActQuickmixCallback (BarApp_t *app, char *buf) { +	PianoStation_t *curStation = app->ph.stations; + +	switch (*buf) { +		case 't': +			/* toggle */ +			while (curStation != NULL) { +				curStation->useQuickMix = !curStation->useQuickMix; +				curStation = curStation->next; +			} +			*buf = '\0'; +			break; + +		case 'a': +			/* enable all */ +			while (curStation != NULL) { +				curStation->useQuickMix = true; +				curStation = curStation->next; +			} +			*buf = '\0'; +			break; + +		case 'n': +			/* enable none */ +			while (curStation != NULL) { +				curStation->useQuickMix = false; +				curStation = curStation->next; +			} +			*buf = '\0'; +			break; +	} +} +  /*	if current station is a quickmix: select stations that are played in   *	quickmix   */ @@ -433,7 +470,8 @@ BarUiActCallback(BarUiActSelectQuickMix) {  	if (selStation->isQuickMix) {  		PianoStation_t *toggleStation;  		while ((toggleStation = BarUiSelectStation (app, -				"Toggle quickmix for station: ")) != NULL) { +				"Toggle quickmix for station: ", +				BarUiActQuickmixCallback)) != NULL) {  			toggleStation->useQuickMix = !toggleStation->useQuickMix;  		}  		BarUiMsg (&app->settings, MSG_INFO, "Setting quickmix stations... "); | 
