From 3e527e95e6981856e9aee867a2cd1cd2f19a1276 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sat, 19 Nov 2011 12:03:17 +0100 Subject: Dymanic station management question Enable/disable delete options depending on availability. --- src/ui_act.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/src/ui_act.c b/src/ui_act.c index 80e3b71..c6fb01c 100644 --- a/src/ui_act.c +++ b/src/ui_act.c @@ -577,7 +577,8 @@ BarUiActCallback(BarUiActManageStation) { PianoReturn_t pRet; WaitressReturn_t wRet; PianoRequestDataGetStationInfo_t reqData; - char selectBuf[2]; + char selectBuf[2], allowedActions[6], *allowedPos = allowedActions; + char question[64]; memset (&reqData, 0, sizeof (reqData)); reqData.station = selStation; @@ -586,9 +587,50 @@ BarUiActCallback(BarUiActManageStation) { BarUiActDefaultPianoCall (PIANO_REQUEST_GET_STATION_INFO, &reqData); BarUiActDefaultEventcmd ("stationfetchinfo"); - BarUiMsg (&app->settings, MSG_QUESTION, "Delete [a]rtist/[s]ong/s[t]ation " - "seeds or [f]eedback? "); - if (BarReadline (selectBuf, sizeof (selectBuf), "astf", &app->input, + /* enable submenus depending on data availability */ + strcpy (question, "Delete "); + if (reqData.info.artistSeeds != NULL) { + strcat (question, "[a]rtist"); + *allowedPos++ = 'a'; + } + if (reqData.info.songSeeds != NULL) { + if (allowedPos != allowedActions) { + strcat (question, "/"); + } + strcat (question, "[s]ong"); + *allowedPos++ = 's'; + } + if (reqData.info.stationSeeds != NULL) { + if (allowedPos != allowedActions) { + strcat (question, "/"); + } + strcat (question, "s[t]ation"); + *allowedPos++ = 't'; + } + if (allowedPos != allowedActions) { + strcat (question, " seeds"); + } + if (reqData.info.feedback != NULL) { + if (allowedPos != allowedActions) { + strcat (question, " or "); + } + strcat (question, "[f]eedback"); + *allowedPos++ = 'f'; + } + *allowedPos = '\0'; + strcat (question, "? "); + + assert (strlen (question) < sizeof (question) / sizeof (*question)); + + /* nothing to see? */ + if (allowedPos == allowedActions) { + BarUiMsg (&app->settings, MSG_ERR, "No seeds or feedback available yet.\n"); + PianoDestroyStationInfo (&reqData.info); + return; + } + + BarUiMsg (&app->settings, MSG_QUESTION, question); + if (BarReadline (selectBuf, sizeof (selectBuf), allowedActions, &app->input, BAR_RL_FULLRETURN, -1)) { if (selectBuf[0] == 'a') { PianoArtist_t *artist = BarUiSelectArtist (app, -- cgit v1.2.3